From patchwork Sat Feb 1 13:17:56 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: MOUMITA DHAR X-Patchwork-Id: 13956234 Received: from mail-pl1-f179.google.com (mail-pl1-f179.google.com [209.85.214.179]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8FEC6F50F for ; Sat, 1 Feb 2025 13:19:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738416066; cv=none; b=XfZUadKkXk6/5o8Pdpugimw45cHm6E8MhRH30cFcQ/E+rSduJ81Q0JBHf3nMN86NtnICz341VZIfInM6EOu8hjEcOF6Zuu6YJsJDoL8uU/wsJCz/CJG2fFGvd/YOQjHLmOwfCJ9uinLIP+tbLt/zmtIg6KqSVrNCGjeUnYcHzN0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738416066; c=relaxed/simple; bh=7qbsm7KUutXwypmuXq40tAW2nNtTzhdB2bxcsYvyq1c=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version:Content-Type; b=E9SDtfao03wPvk/l194MOos5GDdBR0va72+IYIypowbnC58kQWQbcVZ3LQc+3OZryTb1LnoX37vCQy7F5bdTfzZHf2fWGLMWvBZLBRWV4J+nQgC9wlb31h1K9ny4OXLdGEtZwqlkFPqkMNJ54zDAE68jl8oIoCvbUzclU9L0Isk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Ko192TJ7; arc=none smtp.client-ip=209.85.214.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Ko192TJ7" Received: by mail-pl1-f179.google.com with SMTP id d9443c01a7336-21619108a6bso49851665ad.3 for ; Sat, 01 Feb 2025 05:19:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738415996; x=1739020796; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=Nt6L6Cg082OiyeCsLGzlyZjEV5gjxSYa0rhKBUHRC/c=; b=Ko192TJ7l8/u1ahTyZ+JM6MDe0d8wEdb3SzZZgmZvjPEYuLYA3rwmPErDitJsdH6TR cfmwy7zfOrJMVdqSEqxX3sxtCgnmFTYRXceypBEKg1SbBY66ggtqvjOxsnExzThoxdj7 ILwToBMngMkvFcNr7Zl60aBFjyv/qCh43HivWupBBYBWa6rTNjae2KpQZZoSWaMxJXUI xrsMGB/XHfw7UuMLvG7xSn1jA7PG5xsRrMvpTIXc8OVJECc4zm1nopFTq6fgvU7CCz2L 6pqYHk4i5ANJpYAS9vCkvr8EXxfdurcbnM3BdvPMeReYUMu/RrxNiHZAsc+oDszJomj3 2FFQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738415996; x=1739020796; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=Nt6L6Cg082OiyeCsLGzlyZjEV5gjxSYa0rhKBUHRC/c=; b=gTwwUF4j5fQx5o5XJZfksO/wOzrN9LMgS8S14sZjyA1tAllsfvcWnB5KSaApVUgELw eftnrWnynJOCA15ZpV6Nd8BmefYnLiXSXsHANdToqmFC+FKhyQ1dlOFG6EcQnNvAn1FF PLBcIFpO9WsuBJGa1CGNo3GYgncDn1Cj7DpVbb1tSqaLp/RNhDka/d4+S0r/H5YgFX50 w2JALPTn7S/ZSf9XsFqTY7H+mIssM2YYOwdaCoF8uWOkGndg+9rREserJ3U3FifqKL4G bQttLzMoai7bsTrnIG7JdVxo8vEwizK+Z1g0IFa3VZdUAZufLquGewYUbiD/m9kqkkhG +WAA== X-Gm-Message-State: AOJu0YyKlCIuvK/Tod5UUs3FIpvDujgpWLnPUOwsO6NtzETe0YGfuxG2 7SsJk6yEhMog6I0ohmim1EaKqoJmt87xeo+kMXT8lQsywdL/d3HvqPa08w== X-Gm-Gg: ASbGncvJ5o1nU3DBGZ3SVTSXAa4bfhhtvCxGCdyp8DhjEGtMoAPJJxEsRG8C3561lH9 uoASlULiknDL+f3dVOjMKRVgDgcJGNideZC+tzuS5s1yFv9jZ05a3WdGmzh2yHykZs1RpFBUoVy 5gExWIonkncOUuuAJZnofkTMD2ipR9kc7fUC3R0S1kuMRtpFrpreRLILl1iygUv/lETolsdyz30 ap9HfMg9kw9Zy3a+uSdaEu4j1nThmoThir9pEoecvHfCybbDpfwbvy3xovnAnn4Lppx0pv79zaD FmpsIsCoFIL9sYcrYuWggSxOpA== X-Google-Smtp-Source: AGHT+IEU57E8FXhxbqR/y9LBMdwv5DioM7i3J0bmPdFPsO/zVWAPXsHAtITt+xL/j5yrlSIDeMQP6Q== X-Received: by 2002:a17:902:ccc8:b0:215:9894:5679 with SMTP id d9443c01a7336-21dd7b71973mr241135465ad.0.1738415993064; Sat, 01 Feb 2025 05:19:53 -0800 (PST) Received: from localhost.localdomain ([171.60.225.9]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-21de31f8344sm45245115ad.75.2025.02.01.05.19.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 01 Feb 2025 05:19:51 -0800 (PST) From: Moumita To: git@vger.kernel.org Cc: Moumita Subject: [PATCH 1/1] Renamed all *.txt files to .adoc of Documentation Date: Sat, 1 Feb 2025 18:47:56 +0530 Message-ID: <20250201131803.24095-1-dhar61595@gmail.com> X-Mailer: git-send-email 2.48.0 Precedence: bulk X-Mailing-List: git@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 All the .*txt files of the Documentation directory has been renamed to .adoc except the files of the RelNotes directory , the includes directory . The needed changes are also made to Makefile and the meason.build of the respective folders inside the Documentation directory. Signed-off-by: Moumita --- .cirrus.yml | 22 + .clang-format | 225 + .editorconfig | 16 + .gitattributes | 18 + .github/CONTRIBUTING.md | 22 + .github/PULL_REQUEST_TEMPLATE.md | 10 + .github/workflows/check-style.yml | 34 + .github/workflows/check-whitespace.yml | 32 + .github/workflows/coverity.yml | 163 + .github/workflows/l10n.yml | 111 + .github/workflows/main.yml | 434 + .gitignore | 252 + .gitlab-ci.yml | 220 + .gitmodules | 4 + .mailmap | 304 + .tsan-suppressions | 16 + CODE_OF_CONDUCT.md | 145 + COPYING | 360 + Documentation/.gitattributes | 1 + Documentation/.gitignore | 20 + Documentation/BreakingChanges.adoc | 174 + Documentation/CodingGuidelines | 947 + Documentation/DecisionMaking.adoc | 74 + Documentation/Makefile | 526 + Documentation/MyFirstContribution.adoc | 1395 + Documentation/MyFirstObjectWalk.adoc | 898 + Documentation/RelNotes/1.5.0.1.txt | 42 + Documentation/RelNotes/1.5.0.2.txt | 65 + Documentation/RelNotes/1.5.0.3.txt | 58 + Documentation/RelNotes/1.5.0.4.txt | 22 + Documentation/RelNotes/1.5.0.5.txt | 26 + Documentation/RelNotes/1.5.0.6.txt | 21 + Documentation/RelNotes/1.5.0.7.txt | 18 + Documentation/RelNotes/1.5.0.txt | 469 + Documentation/RelNotes/1.5.1.1.txt | 65 + Documentation/RelNotes/1.5.1.2.txt | 50 + Documentation/RelNotes/1.5.1.3.txt | 45 + Documentation/RelNotes/1.5.1.4.txt | 30 + Documentation/RelNotes/1.5.1.5.txt | 42 + Documentation/RelNotes/1.5.1.6.txt | 45 + Documentation/RelNotes/1.5.1.txt | 371 + Documentation/RelNotes/1.5.2.1.txt | 47 + Documentation/RelNotes/1.5.2.2.txt | 61 + Documentation/RelNotes/1.5.2.3.txt | 27 + Documentation/RelNotes/1.5.2.4.txt | 28 + Documentation/RelNotes/1.5.2.5.txt | 30 + Documentation/RelNotes/1.5.2.txt | 197 + Documentation/RelNotes/1.5.3.1.txt | 10 + Documentation/RelNotes/1.5.3.2.txt | 58 + Documentation/RelNotes/1.5.3.3.txt | 31 + Documentation/RelNotes/1.5.3.4.txt | 35 + Documentation/RelNotes/1.5.3.5.txt | 94 + Documentation/RelNotes/1.5.3.6.txt | 48 + Documentation/RelNotes/1.5.3.7.txt | 45 + Documentation/RelNotes/1.5.3.8.txt | 25 + Documentation/RelNotes/1.5.3.txt | 366 + Documentation/RelNotes/1.5.4.1.txt | 17 + Documentation/RelNotes/1.5.4.2.txt | 43 + Documentation/RelNotes/1.5.4.3.txt | 27 + Documentation/RelNotes/1.5.4.4.txt | 66 + Documentation/RelNotes/1.5.4.5.txt | 56 + Documentation/RelNotes/1.5.4.6.txt | 43 + Documentation/RelNotes/1.5.4.7.txt | 10 + Documentation/RelNotes/1.5.4.txt | 377 + Documentation/RelNotes/1.5.5.1.txt | 44 + Documentation/RelNotes/1.5.5.2.txt | 27 + Documentation/RelNotes/1.5.5.3.txt | 12 + Documentation/RelNotes/1.5.5.4.txt | 7 + Documentation/RelNotes/1.5.5.5.txt | 11 + Documentation/RelNotes/1.5.5.6.txt | 10 + Documentation/RelNotes/1.5.5.txt | 207 + Documentation/RelNotes/1.5.6.1.txt | 28 + Documentation/RelNotes/1.5.6.2.txt | 40 + Documentation/RelNotes/1.5.6.3.txt | 52 + Documentation/RelNotes/1.5.6.4.txt | 47 + Documentation/RelNotes/1.5.6.5.txt | 29 + Documentation/RelNotes/1.5.6.6.txt | 10 + Documentation/RelNotes/1.5.6.txt | 115 + Documentation/RelNotes/1.6.0.1.txt | 36 + Documentation/RelNotes/1.6.0.2.txt | 81 + Documentation/RelNotes/1.6.0.3.txt | 117 + Documentation/RelNotes/1.6.0.4.txt | 39 + Documentation/RelNotes/1.6.0.5.txt | 56 + Documentation/RelNotes/1.6.0.6.txt | 33 + Documentation/RelNotes/1.6.0.txt | 258 + Documentation/RelNotes/1.6.1.1.txt | 59 + Documentation/RelNotes/1.6.1.2.txt | 39 + Documentation/RelNotes/1.6.1.3.txt | 28 + Documentation/RelNotes/1.6.1.4.txt | 41 + Documentation/RelNotes/1.6.1.txt | 280 + Documentation/RelNotes/1.6.2.1.txt | 19 + Documentation/RelNotes/1.6.2.2.txt | 45 + Documentation/RelNotes/1.6.2.3.txt | 22 + Documentation/RelNotes/1.6.2.4.txt | 39 + Documentation/RelNotes/1.6.2.5.txt | 21 + Documentation/RelNotes/1.6.2.txt | 164 + Documentation/RelNotes/1.6.3.1.txt | 10 + Documentation/RelNotes/1.6.3.2.txt | 61 + Documentation/RelNotes/1.6.3.3.txt | 38 + Documentation/RelNotes/1.6.3.4.txt | 36 + Documentation/RelNotes/1.6.3.txt | 182 + Documentation/RelNotes/1.6.4.1.txt | 46 + Documentation/RelNotes/1.6.4.2.txt | 32 + Documentation/RelNotes/1.6.4.3.txt | 29 + Documentation/RelNotes/1.6.4.4.txt | 26 + Documentation/RelNotes/1.6.4.5.txt | 20 + Documentation/RelNotes/1.6.4.txt | 147 + Documentation/RelNotes/1.6.5.1.txt | 20 + Documentation/RelNotes/1.6.5.2.txt | 19 + Documentation/RelNotes/1.6.5.3.txt | 63 + Documentation/RelNotes/1.6.5.4.txt | 32 + Documentation/RelNotes/1.6.5.5.txt | 49 + Documentation/RelNotes/1.6.5.6.txt | 23 + Documentation/RelNotes/1.6.5.7.txt | 19 + Documentation/RelNotes/1.6.5.8.txt | 28 + Documentation/RelNotes/1.6.5.9.txt | 18 + Documentation/RelNotes/1.6.5.txt | 169 + Documentation/RelNotes/1.6.6.1.txt | 37 + Documentation/RelNotes/1.6.6.2.txt | 46 + Documentation/RelNotes/1.6.6.3.txt | 23 + Documentation/RelNotes/1.6.6.txt | 224 + Documentation/RelNotes/1.7.0.1.txt | 35 + Documentation/RelNotes/1.7.0.2.txt | 40 + Documentation/RelNotes/1.7.0.3.txt | 34 + Documentation/RelNotes/1.7.0.4.txt | 27 + Documentation/RelNotes/1.7.0.5.txt | 26 + Documentation/RelNotes/1.7.0.6.txt | 13 + Documentation/RelNotes/1.7.0.7.txt | 16 + Documentation/RelNotes/1.7.0.8.txt | 10 + Documentation/RelNotes/1.7.0.9.txt | 8 + Documentation/RelNotes/1.7.0.txt | 214 + Documentation/RelNotes/1.7.1.1.txt | 96 + Documentation/RelNotes/1.7.1.2.txt | 28 + Documentation/RelNotes/1.7.1.3.txt | 10 + Documentation/RelNotes/1.7.1.4.txt | 8 + Documentation/RelNotes/1.7.1.txt | 89 + Documentation/RelNotes/1.7.10.1.txt | 78 + Documentation/RelNotes/1.7.10.2.txt | 85 + Documentation/RelNotes/1.7.10.3.txt | 43 + Documentation/RelNotes/1.7.10.4.txt | 29 + Documentation/RelNotes/1.7.10.5.txt | 12 + Documentation/RelNotes/1.7.10.txt | 219 + Documentation/RelNotes/1.7.11.1.txt | 9 + Documentation/RelNotes/1.7.11.2.txt | 53 + Documentation/RelNotes/1.7.11.3.txt | 53 + Documentation/RelNotes/1.7.11.4.txt | 31 + Documentation/RelNotes/1.7.11.5.txt | 36 + Documentation/RelNotes/1.7.11.6.txt | 84 + Documentation/RelNotes/1.7.11.7.txt | 46 + Documentation/RelNotes/1.7.11.txt | 139 + Documentation/RelNotes/1.7.12.1.txt | 134 + Documentation/RelNotes/1.7.12.2.txt | 40 + Documentation/RelNotes/1.7.12.3.txt | 34 + Documentation/RelNotes/1.7.12.4.txt | 23 + Documentation/RelNotes/1.7.12.txt | 136 + Documentation/RelNotes/1.7.2.1.txt | 25 + Documentation/RelNotes/1.7.2.2.txt | 22 + Documentation/RelNotes/1.7.2.3.txt | 39 + Documentation/RelNotes/1.7.2.4.txt | 10 + Documentation/RelNotes/1.7.2.5.txt | 8 + Documentation/RelNotes/1.7.2.txt | 151 + Documentation/RelNotes/1.7.3.1.txt | 14 + Documentation/RelNotes/1.7.3.2.txt | 5 + Documentation/RelNotes/1.7.3.3.txt | 54 + Documentation/RelNotes/1.7.3.4.txt | 45 + Documentation/RelNotes/1.7.3.5.txt | 34 + Documentation/RelNotes/1.7.3.txt | 76 + Documentation/RelNotes/1.7.4.1.txt | 27 + Documentation/RelNotes/1.7.4.2.txt | 58 + Documentation/RelNotes/1.7.4.3.txt | 32 + Documentation/RelNotes/1.7.4.4.txt | 35 + Documentation/RelNotes/1.7.4.5.txt | 4 + Documentation/RelNotes/1.7.4.txt | 156 + Documentation/RelNotes/1.7.5.1.txt | 47 + Documentation/RelNotes/1.7.5.2.txt | 57 + Documentation/RelNotes/1.7.5.3.txt | 32 + Documentation/RelNotes/1.7.5.4.txt | 21 + Documentation/RelNotes/1.7.5.txt | 132 + Documentation/RelNotes/1.7.6.1.txt | 63 + Documentation/RelNotes/1.7.6.2.txt | 8 + Documentation/RelNotes/1.7.6.3.txt | 24 + Documentation/RelNotes/1.7.6.4.txt | 32 + Documentation/RelNotes/1.7.6.5.txt | 26 + Documentation/RelNotes/1.7.6.6.txt | 16 + Documentation/RelNotes/1.7.6.txt | 136 + Documentation/RelNotes/1.7.7.1.txt | 60 + Documentation/RelNotes/1.7.7.2.txt | 44 + Documentation/RelNotes/1.7.7.3.txt | 19 + Documentation/RelNotes/1.7.7.4.txt | 14 + Documentation/RelNotes/1.7.7.5.txt | 14 + Documentation/RelNotes/1.7.7.6.txt | 20 + Documentation/RelNotes/1.7.7.7.txt | 13 + Documentation/RelNotes/1.7.7.txt | 134 + Documentation/RelNotes/1.7.8.1.txt | 38 + Documentation/RelNotes/1.7.8.2.txt | 71 + Documentation/RelNotes/1.7.8.3.txt | 16 + Documentation/RelNotes/1.7.8.4.txt | 23 + Documentation/RelNotes/1.7.8.5.txt | 19 + Documentation/RelNotes/1.7.8.6.txt | 22 + Documentation/RelNotes/1.7.8.txt | 161 + Documentation/RelNotes/1.7.9.1.txt | 63 + Documentation/RelNotes/1.7.9.2.txt | 69 + Documentation/RelNotes/1.7.9.3.txt | 51 + Documentation/RelNotes/1.7.9.4.txt | 24 + Documentation/RelNotes/1.7.9.5.txt | 23 + Documentation/RelNotes/1.7.9.6.txt | 12 + Documentation/RelNotes/1.7.9.7.txt | 13 + Documentation/RelNotes/1.7.9.txt | 112 + Documentation/RelNotes/1.8.0.1.txt | 64 + Documentation/RelNotes/1.8.0.2.txt | 34 + Documentation/RelNotes/1.8.0.3.txt | 14 + Documentation/RelNotes/1.8.0.txt | 267 + Documentation/RelNotes/1.8.1.1.txt | 87 + Documentation/RelNotes/1.8.1.2.txt | 25 + Documentation/RelNotes/1.8.1.3.txt | 47 + Documentation/RelNotes/1.8.1.4.txt | 11 + Documentation/RelNotes/1.8.1.5.txt | 47 + Documentation/RelNotes/1.8.1.6.txt | 39 + Documentation/RelNotes/1.8.1.txt | 241 + Documentation/RelNotes/1.8.2.1.txt | 115 + Documentation/RelNotes/1.8.2.2.txt | 61 + Documentation/RelNotes/1.8.2.3.txt | 19 + Documentation/RelNotes/1.8.2.txt | 495 + Documentation/RelNotes/1.8.3.1.txt | 14 + Documentation/RelNotes/1.8.3.2.txt | 59 + Documentation/RelNotes/1.8.3.3.txt | 47 + Documentation/RelNotes/1.8.3.4.txt | 20 + Documentation/RelNotes/1.8.3.txt | 436 + Documentation/RelNotes/1.8.4.1.txt | 71 + Documentation/RelNotes/1.8.4.2.txt | 77 + Documentation/RelNotes/1.8.4.3.txt | 54 + Documentation/RelNotes/1.8.4.4.txt | 10 + Documentation/RelNotes/1.8.4.5.txt | 13 + Documentation/RelNotes/1.8.4.txt | 486 + Documentation/RelNotes/1.8.5.1.txt | 9 + Documentation/RelNotes/1.8.5.2.txt | 20 + Documentation/RelNotes/1.8.5.3.txt | 27 + Documentation/RelNotes/1.8.5.4.txt | 48 + Documentation/RelNotes/1.8.5.5.txt | 37 + Documentation/RelNotes/1.8.5.6.txt | 34 + Documentation/RelNotes/1.8.5.txt | 456 + Documentation/RelNotes/1.9.0.txt | 345 + Documentation/RelNotes/1.9.1.txt | 59 + Documentation/RelNotes/1.9.2.txt | 67 + Documentation/RelNotes/1.9.3.txt | 21 + Documentation/RelNotes/1.9.4.txt | 16 + Documentation/RelNotes/1.9.5.txt | 34 + Documentation/RelNotes/2.0.0.txt | 364 + Documentation/RelNotes/2.0.1.txt | 115 + Documentation/RelNotes/2.0.2.txt | 32 + Documentation/RelNotes/2.0.3.txt | 17 + Documentation/RelNotes/2.0.4.txt | 5 + Documentation/RelNotes/2.0.5.txt | 34 + Documentation/RelNotes/2.1.0.txt | 391 + Documentation/RelNotes/2.1.1.txt | 44 + Documentation/RelNotes/2.1.2.txt | 20 + Documentation/RelNotes/2.1.3.txt | 26 + Documentation/RelNotes/2.1.4.txt | 34 + Documentation/RelNotes/2.10.0.txt | 675 + Documentation/RelNotes/2.10.1.txt | 131 + Documentation/RelNotes/2.10.2.txt | 111 + Documentation/RelNotes/2.10.3.txt | 55 + Documentation/RelNotes/2.10.4.txt | 4 + Documentation/RelNotes/2.10.5.txt | 17 + Documentation/RelNotes/2.11.0.txt | 593 + Documentation/RelNotes/2.11.1.txt | 168 + Documentation/RelNotes/2.11.2.txt | 12 + Documentation/RelNotes/2.11.3.txt | 4 + Documentation/RelNotes/2.11.4.txt | 17 + Documentation/RelNotes/2.12.0.txt | 500 + Documentation/RelNotes/2.12.1.txt | 41 + Documentation/RelNotes/2.12.2.txt | 83 + Documentation/RelNotes/2.12.3.txt | 64 + Documentation/RelNotes/2.12.4.txt | 4 + Documentation/RelNotes/2.12.5.txt | 17 + Documentation/RelNotes/2.13.0.txt | 618 + Documentation/RelNotes/2.13.1.txt | 114 + Documentation/RelNotes/2.13.2.txt | 54 + Documentation/RelNotes/2.13.3.txt | 62 + Documentation/RelNotes/2.13.4.txt | 28 + Documentation/RelNotes/2.13.5.txt | 4 + Documentation/RelNotes/2.13.6.txt | 17 + Documentation/RelNotes/2.13.7.txt | 20 + Documentation/RelNotes/2.14.0.txt | 517 + Documentation/RelNotes/2.14.1.txt | 4 + Documentation/RelNotes/2.14.2.txt | 105 + Documentation/RelNotes/2.14.3.txt | 99 + Documentation/RelNotes/2.14.4.txt | 5 + Documentation/RelNotes/2.14.5.txt | 16 + Documentation/RelNotes/2.14.6.txt | 54 + Documentation/RelNotes/2.15.0.txt | 508 + Documentation/RelNotes/2.15.1.txt | 88 + Documentation/RelNotes/2.15.2.txt | 50 + Documentation/RelNotes/2.15.3.txt | 6 + Documentation/RelNotes/2.15.4.txt | 11 + Documentation/RelNotes/2.16.0.txt | 482 + Documentation/RelNotes/2.16.1.txt | 11 + Documentation/RelNotes/2.16.2.txt | 30 + Documentation/RelNotes/2.16.3.txt | 49 + Documentation/RelNotes/2.16.4.txt | 5 + Documentation/RelNotes/2.16.5.txt | 6 + Documentation/RelNotes/2.16.6.txt | 8 + Documentation/RelNotes/2.17.0.txt | 398 + Documentation/RelNotes/2.17.1.txt | 16 + Documentation/RelNotes/2.17.2.txt | 12 + Documentation/RelNotes/2.17.3.txt | 12 + Documentation/RelNotes/2.17.4.txt | 16 + Documentation/RelNotes/2.17.5.txt | 22 + Documentation/RelNotes/2.17.6.txt | 16 + Documentation/RelNotes/2.18.0.txt | 583 + Documentation/RelNotes/2.18.1.txt | 6 + Documentation/RelNotes/2.18.2.txt | 8 + Documentation/RelNotes/2.18.3.txt | 5 + Documentation/RelNotes/2.18.4.txt | 5 + Documentation/RelNotes/2.18.5.txt | 6 + Documentation/RelNotes/2.19.0.txt | 615 + Documentation/RelNotes/2.19.1.txt | 6 + Documentation/RelNotes/2.19.2.txt | 108 + Documentation/RelNotes/2.19.3.txt | 8 + Documentation/RelNotes/2.19.4.txt | 5 + Documentation/RelNotes/2.19.5.txt | 5 + Documentation/RelNotes/2.19.6.txt | 6 + Documentation/RelNotes/2.2.0.txt | 313 + Documentation/RelNotes/2.2.1.txt | 34 + Documentation/RelNotes/2.2.2.txt | 63 + Documentation/RelNotes/2.2.3.txt | 9 + Documentation/RelNotes/2.20.0.txt | 700 + Documentation/RelNotes/2.20.1.txt | 20 + Documentation/RelNotes/2.20.2.txt | 18 + Documentation/RelNotes/2.20.3.txt | 5 + Documentation/RelNotes/2.20.4.txt | 5 + Documentation/RelNotes/2.20.5.txt | 6 + Documentation/RelNotes/2.21.0.txt | 451 + Documentation/RelNotes/2.21.1.txt | 12 + Documentation/RelNotes/2.21.2.txt | 5 + Documentation/RelNotes/2.21.3.txt | 5 + Documentation/RelNotes/2.21.4.txt | 6 + Documentation/RelNotes/2.22.0.txt | 597 + Documentation/RelNotes/2.22.1.txt | 150 + Documentation/RelNotes/2.22.2.txt | 8 + Documentation/RelNotes/2.22.3.txt | 5 + Documentation/RelNotes/2.22.4.txt | 5 + Documentation/RelNotes/2.22.5.txt | 7 + Documentation/RelNotes/2.23.0.txt | 348 + Documentation/RelNotes/2.23.1.txt | 8 + Documentation/RelNotes/2.23.2.txt | 5 + Documentation/RelNotes/2.23.3.txt | 5 + Documentation/RelNotes/2.23.4.txt | 7 + Documentation/RelNotes/2.24.0.txt | 398 + Documentation/RelNotes/2.24.1.txt | 8 + Documentation/RelNotes/2.24.2.txt | 5 + Documentation/RelNotes/2.24.3.txt | 5 + Documentation/RelNotes/2.24.4.txt | 7 + Documentation/RelNotes/2.25.0.txt | 370 + Documentation/RelNotes/2.25.1.txt | 55 + Documentation/RelNotes/2.25.2.txt | 60 + Documentation/RelNotes/2.25.3.txt | 5 + Documentation/RelNotes/2.25.4.txt | 5 + Documentation/RelNotes/2.25.5.txt | 7 + Documentation/RelNotes/2.26.0.txt | 341 + Documentation/RelNotes/2.26.1.txt | 5 + Documentation/RelNotes/2.26.2.txt | 5 + Documentation/RelNotes/2.26.3.txt | 7 + Documentation/RelNotes/2.27.0.txt | 525 + Documentation/RelNotes/2.27.1.txt | 7 + Documentation/RelNotes/2.28.0.txt | 236 + Documentation/RelNotes/2.28.1.txt | 7 + Documentation/RelNotes/2.29.0.txt | 514 + Documentation/RelNotes/2.29.1.txt | 11 + Documentation/RelNotes/2.29.2.txt | 12 + Documentation/RelNotes/2.29.3.txt | 8 + Documentation/RelNotes/2.3.0.txt | 300 + Documentation/RelNotes/2.3.1.txt | 52 + Documentation/RelNotes/2.3.10.txt | 18 + Documentation/RelNotes/2.3.2.txt | 79 + Documentation/RelNotes/2.3.3.txt | 39 + Documentation/RelNotes/2.3.4.txt | 32 + Documentation/RelNotes/2.3.5.txt | 44 + Documentation/RelNotes/2.3.6.txt | 13 + Documentation/RelNotes/2.3.7.txt | 21 + Documentation/RelNotes/2.3.8.txt | 22 + Documentation/RelNotes/2.3.9.txt | 9 + Documentation/RelNotes/2.30.0.txt | 401 + Documentation/RelNotes/2.30.1.txt | 55 + Documentation/RelNotes/2.30.2.txt | 8 + Documentation/RelNotes/2.30.3.txt | 24 + Documentation/RelNotes/2.30.4.txt | 21 + Documentation/RelNotes/2.30.5.txt | 12 + Documentation/RelNotes/2.30.6.txt | 60 + Documentation/RelNotes/2.30.7.txt | 86 + Documentation/RelNotes/2.30.8.txt | 51 + Documentation/RelNotes/2.30.9.txt | 43 + Documentation/RelNotes/2.31.0.txt | 365 + Documentation/RelNotes/2.31.1.txt | 27 + Documentation/RelNotes/2.31.2.txt | 6 + Documentation/RelNotes/2.31.3.txt | 4 + Documentation/RelNotes/2.31.4.txt | 6 + Documentation/RelNotes/2.31.5.txt | 5 + Documentation/RelNotes/2.31.6.txt | 5 + Documentation/RelNotes/2.31.7.txt | 6 + Documentation/RelNotes/2.31.8.txt | 6 + Documentation/RelNotes/2.32.0.txt | 416 + Documentation/RelNotes/2.32.1.txt | 6 + Documentation/RelNotes/2.32.2.txt | 4 + Documentation/RelNotes/2.32.3.txt | 6 + Documentation/RelNotes/2.32.4.txt | 5 + Documentation/RelNotes/2.32.5.txt | 8 + Documentation/RelNotes/2.32.6.txt | 6 + Documentation/RelNotes/2.32.7.txt | 7 + Documentation/RelNotes/2.33.0.txt | 279 + Documentation/RelNotes/2.33.1.txt | 138 + Documentation/RelNotes/2.33.2.txt | 15 + Documentation/RelNotes/2.33.3.txt | 4 + Documentation/RelNotes/2.33.4.txt | 6 + Documentation/RelNotes/2.33.5.txt | 5 + Documentation/RelNotes/2.33.6.txt | 5 + Documentation/RelNotes/2.33.7.txt | 7 + Documentation/RelNotes/2.33.8.txt | 7 + Documentation/RelNotes/2.34.0.txt | 438 + Documentation/RelNotes/2.34.1.txt | 23 + Documentation/RelNotes/2.34.2.txt | 6 + Documentation/RelNotes/2.34.3.txt | 4 + Documentation/RelNotes/2.34.4.txt | 6 + Documentation/RelNotes/2.34.5.txt | 5 + Documentation/RelNotes/2.34.6.txt | 5 + Documentation/RelNotes/2.34.7.txt | 7 + Documentation/RelNotes/2.34.8.txt | 7 + Documentation/RelNotes/2.35.0.txt | 412 + Documentation/RelNotes/2.35.1.txt | 6 + Documentation/RelNotes/2.35.2.txt | 7 + Documentation/RelNotes/2.35.3.txt | 4 + Documentation/RelNotes/2.35.4.txt | 7 + Documentation/RelNotes/2.35.5.txt | 5 + Documentation/RelNotes/2.35.6.txt | 5 + Documentation/RelNotes/2.35.7.txt | 7 + Documentation/RelNotes/2.35.8.txt | 7 + Documentation/RelNotes/2.36.0.txt | 429 + Documentation/RelNotes/2.36.1.txt | 33 + Documentation/RelNotes/2.36.2.txt | 56 + Documentation/RelNotes/2.36.3.txt | 5 + Documentation/RelNotes/2.36.4.txt | 5 + Documentation/RelNotes/2.36.5.txt | 7 + Documentation/RelNotes/2.36.6.txt | 7 + Documentation/RelNotes/2.37.0.txt | 337 + Documentation/RelNotes/2.37.1.txt | 17 + Documentation/RelNotes/2.37.2.txt | 88 + Documentation/RelNotes/2.37.3.txt | 46 + Documentation/RelNotes/2.37.4.txt | 65 + Documentation/RelNotes/2.37.5.txt | 5 + Documentation/RelNotes/2.37.6.txt | 7 + Documentation/RelNotes/2.37.7.txt | 7 + Documentation/RelNotes/2.38.0.txt | 404 + Documentation/RelNotes/2.38.1.txt | 5 + Documentation/RelNotes/2.38.2.txt | 67 + Documentation/RelNotes/2.38.3.txt | 5 + Documentation/RelNotes/2.38.4.txt | 7 + Documentation/RelNotes/2.38.5.txt | 8 + Documentation/RelNotes/2.39.0.txt | 346 + Documentation/RelNotes/2.39.1.txt | 5 + Documentation/RelNotes/2.39.2.txt | 7 + Documentation/RelNotes/2.39.3.txt | 64 + Documentation/RelNotes/2.39.4.txt | 79 + Documentation/RelNotes/2.39.5.txt | 26 + Documentation/RelNotes/2.4.0.txt | 514 + Documentation/RelNotes/2.4.1.txt | 40 + Documentation/RelNotes/2.4.10.txt | 18 + Documentation/RelNotes/2.4.11.txt | 11 + Documentation/RelNotes/2.4.12.txt | 12 + Documentation/RelNotes/2.4.2.txt | 45 + Documentation/RelNotes/2.4.3.txt | 76 + Documentation/RelNotes/2.4.4.txt | 35 + Documentation/RelNotes/2.4.5.txt | 28 + Documentation/RelNotes/2.4.6.txt | 23 + Documentation/RelNotes/2.4.7.txt | 53 + Documentation/RelNotes/2.4.8.txt | 21 + Documentation/RelNotes/2.4.9.txt | 9 + Documentation/RelNotes/2.40.0.txt | 320 + Documentation/RelNotes/2.40.1.txt | 8 + Documentation/RelNotes/2.40.2.txt | 7 + Documentation/RelNotes/2.40.3.txt | 26 + Documentation/RelNotes/2.40.4.txt | 5 + Documentation/RelNotes/2.41.0.txt | 399 + Documentation/RelNotes/2.41.1.txt | 7 + Documentation/RelNotes/2.41.2.txt | 26 + Documentation/RelNotes/2.41.3.txt | 6 + Documentation/RelNotes/2.42.0.txt | 329 + Documentation/RelNotes/2.42.1.txt | 88 + Documentation/RelNotes/2.42.2.txt | 7 + Documentation/RelNotes/2.42.3.txt | 26 + Documentation/RelNotes/2.42.4.txt | 6 + Documentation/RelNotes/2.43.0.txt | 323 + Documentation/RelNotes/2.43.1.txt | 82 + Documentation/RelNotes/2.43.2.txt | 37 + Documentation/RelNotes/2.43.3.txt | 12 + Documentation/RelNotes/2.43.4.txt | 7 + Documentation/RelNotes/2.43.5.txt | 26 + Documentation/RelNotes/2.43.6.txt | 7 + Documentation/RelNotes/2.44.0.txt | 334 + Documentation/RelNotes/2.44.1.txt | 8 + Documentation/RelNotes/2.44.2.txt | 26 + Documentation/RelNotes/2.44.3.txt | 7 + Documentation/RelNotes/2.45.0.txt | 476 + Documentation/RelNotes/2.45.1.txt | 8 + Documentation/RelNotes/2.45.2.txt | 26 + Documentation/RelNotes/2.45.3.txt | 112 + Documentation/RelNotes/2.46.0.txt | 461 + Documentation/RelNotes/2.46.1.txt | 75 + Documentation/RelNotes/2.46.2.txt | 23 + Documentation/RelNotes/2.46.3.txt | 6 + Documentation/RelNotes/2.47.0.txt | 342 + Documentation/RelNotes/2.47.1.txt | 31 + Documentation/RelNotes/2.47.2.txt | 7 + Documentation/RelNotes/2.48.0.txt | 330 + Documentation/RelNotes/2.48.1.txt | 7 + Documentation/RelNotes/2.49.0.txt | 118 + Documentation/RelNotes/2.5.0.txt | 564 + Documentation/RelNotes/2.5.1.txt | 65 + Documentation/RelNotes/2.5.2.txt | 63 + Documentation/RelNotes/2.5.3.txt | 17 + Documentation/RelNotes/2.5.4.txt | 18 + Documentation/RelNotes/2.5.5.txt | 11 + Documentation/RelNotes/2.5.6.txt | 12 + Documentation/RelNotes/2.6.0.txt | 370 + Documentation/RelNotes/2.6.1.txt | 18 + Documentation/RelNotes/2.6.2.txt | 65 + Documentation/RelNotes/2.6.3.txt | 111 + Documentation/RelNotes/2.6.4.txt | 63 + Documentation/RelNotes/2.6.5.txt | 58 + Documentation/RelNotes/2.6.6.txt | 11 + Documentation/RelNotes/2.6.7.txt | 12 + Documentation/RelNotes/2.7.0.txt | 414 + Documentation/RelNotes/2.7.1.txt | 87 + Documentation/RelNotes/2.7.2.txt | 41 + Documentation/RelNotes/2.7.3.txt | 62 + Documentation/RelNotes/2.7.4.txt | 11 + Documentation/RelNotes/2.7.5.txt | 14 + Documentation/RelNotes/2.7.6.txt | 25 + Documentation/RelNotes/2.8.0.txt | 439 + Documentation/RelNotes/2.8.1.txt | 9 + Documentation/RelNotes/2.8.2.txt | 70 + Documentation/RelNotes/2.8.3.txt | 101 + Documentation/RelNotes/2.8.4.txt | 69 + Documentation/RelNotes/2.8.5.txt | 12 + Documentation/RelNotes/2.8.6.txt | 4 + Documentation/RelNotes/2.9.0.txt | 512 + Documentation/RelNotes/2.9.1.txt | 117 + Documentation/RelNotes/2.9.2.txt | 13 + Documentation/RelNotes/2.9.3.txt | 170 + Documentation/RelNotes/2.9.4.txt | 90 + Documentation/RelNotes/2.9.5.txt | 4 + Documentation/ReviewingGuidelines.adoc | 179 + Documentation/SubmittingPatches | 838 + Documentation/ToolsForGit.adoc | 51 + Documentation/asciidoc.conf.in | 92 + Documentation/asciidoctor-extensions.rb.in | 134 + Documentation/blame-options.adoc | 149 + Documentation/build-docdep.perl | 49 + Documentation/cat-texi.perl | 46 + Documentation/cmd-list.perl | 80 + Documentation/config.adoc | 557 + Documentation/config/add.adoc | 12 + Documentation/config/advice.adoc | 169 + Documentation/config/alias.adoc | 43 + Documentation/config/am.adoc | 14 + Documentation/config/apply.adoc | 11 + Documentation/config/attr.adoc | 6 + Documentation/config/bitmap-pseudo-merge.adoc | 91 + Documentation/config/blame.adoc | 37 + Documentation/config/branch.adoc | 103 + Documentation/config/browser.adoc | 9 + Documentation/config/bundle.adoc | 31 + Documentation/config/checkout.adoc | 44 + Documentation/config/clean.adoc | 3 + Documentation/config/clone.adoc | 23 + Documentation/config/color.adoc | 206 + Documentation/config/column.adoc | 55 + Documentation/config/commit.adoc | 34 + Documentation/config/commitgraph.adoc | 37 + Documentation/config/completion.adoc | 7 + Documentation/config/core.adoc | 760 + Documentation/config/credential.adoc | 55 + Documentation/config/diff.adoc | 267 + Documentation/config/difftool.adoc | 45 + Documentation/config/extensions.adoc | 103 + Documentation/config/fastimport.adoc | 8 + Documentation/config/feature.adoc | 37 + Documentation/config/fetch.adoc | 128 + Documentation/config/filter.adoc | 9 + Documentation/config/fmt-merge-msg.adoc | 22 + Documentation/config/format.adoc | 153 + Documentation/config/fsck.adoc | 71 + Documentation/config/fsmonitor--daemon.adoc | 11 + Documentation/config/gc.adoc | 181 + Documentation/config/gitcvs.adoc | 67 + Documentation/config/gitweb.adoc | 16 + Documentation/config/gpg.adoc | 85 + Documentation/config/grep.adoc | 28 + Documentation/config/gui.adoc | 57 + Documentation/config/guitool.adoc | 50 + Documentation/config/help.adoc | 26 + Documentation/config/http.adoc | 355 + Documentation/config/i18n.adoc | 10 + Documentation/config/imap.adoc | 44 + Documentation/config/includeif.adoc | 6 + Documentation/config/index.adoc | 43 + Documentation/config/init.adoc | 20 + Documentation/config/instaweb.adoc | 20 + Documentation/config/interactive.adoc | 15 + Documentation/config/log.adoc | 64 + Documentation/config/lsrefs.adoc | 9 + Documentation/config/mailinfo.adoc | 6 + Documentation/config/mailmap.adoc | 15 + Documentation/config/maintenance.adoc | 71 + Documentation/config/man.adoc | 12 + Documentation/config/merge.adoc | 125 + Documentation/config/mergetool.adoc | 101 + Documentation/config/notes.adoc | 68 + Documentation/config/pack.adoc | 207 + Documentation/config/pager.adoc | 8 + Documentation/config/pretty.adoc | 9 + Documentation/config/promisor.adoc | 3 + Documentation/config/protocol.adoc | 63 + Documentation/config/pull.adoc | 33 + Documentation/config/push.adoc | 134 + Documentation/config/rebase.adoc | 87 + Documentation/config/receive.adoc | 145 + Documentation/config/reftable.adoc | 56 + Documentation/config/remote.adoc | 121 + Documentation/config/remotes.adoc | 3 + Documentation/config/repack.adoc | 41 + Documentation/config/rerere.adoc | 12 + Documentation/config/revert.adoc | 3 + Documentation/config/safe.adoc | 62 + Documentation/config/sendemail.adoc | 115 + Documentation/config/sequencer.adoc | 5 + Documentation/config/showbranch.adoc | 3 + Documentation/config/sparse.adoc | 27 + Documentation/config/splitindex.adoc | 24 + Documentation/config/ssh.adoc | 35 + Documentation/config/stash.adoc | 14 + Documentation/config/status.adoc | 79 + Documentation/config/submodule.adoc | 108 + Documentation/config/tag.adoc | 17 + Documentation/config/tar.adoc | 6 + Documentation/config/trace2.adoc | 71 + Documentation/config/transfer.adoc | 127 + Documentation/config/uploadarchive.adoc | 6 + Documentation/config/uploadpack.adoc | 88 + Documentation/config/url.adoc | 30 + Documentation/config/user.adoc | 48 + Documentation/config/versionsort.adoc | 33 + Documentation/config/web.adoc | 4 + Documentation/config/worktree.adoc | 19 + Documentation/date-formats.adoc | 31 + Documentation/diff-format.adoc | 185 + Documentation/diff-generate-patch.adoc | 210 + Documentation/diff-options.adoc | 891 + Documentation/doc-diff | 186 + Documentation/docbook-xsl.css | 296 + Documentation/docbook.xsl | 8 + Documentation/docinfo-html.in | 5 + Documentation/everyday.txto | 9 + Documentation/fetch-options.adoc | 331 + Documentation/fix-texi.perl | 15 + Documentation/fsck-msgids.adoc | 221 + Documentation/generate-mergetool-list.sh | 17 + Documentation/git-add.adoc | 456 + Documentation/git-am.adoc | 298 + Documentation/git-annotate.adoc | 33 + Documentation/git-apply.adoc | 298 + Documentation/git-archimport.adoc | 113 + Documentation/git-archive.adoc | 243 + Documentation/git-bisect-lk2009.adoc | 1358 + Documentation/git-bisect.adoc | 517 + Documentation/git-blame.adoc | 257 + Documentation/git-branch.adoc | 430 + Documentation/git-bugreport.adoc | 77 + Documentation/git-bundle.adoc | 372 + Documentation/git-cat-file.adoc | 412 + Documentation/git-check-attr.adoc | 125 + Documentation/git-check-ignore.adoc | 126 + Documentation/git-check-mailmap.adoc | 64 + Documentation/git-check-ref-format.adoc | 140 + Documentation/git-checkout-index.adoc | 183 + Documentation/git-checkout.adoc | 626 + Documentation/git-cherry-pick.adoc | 259 + Documentation/git-cherry.adoc | 145 + Documentation/git-citool.adoc | 25 + Documentation/git-clean.adoc | 153 + Documentation/git-clone.adoc | 408 + Documentation/git-column.adoc | 86 + Documentation/git-commit-graph.adoc | 163 + Documentation/git-commit-tree.adoc | 101 + Documentation/git-commit.adoc | 589 + Documentation/git-config.adoc | 638 + Documentation/git-count-objects.adoc | 54 + .../git-credential-cache--daemon.adoc | 30 + Documentation/git-credential-cache.adoc | 100 + Documentation/git-credential-store.adoc | 110 + Documentation/git-credential.adoc | 294 + Documentation/git-cvsexportcommit.adoc | 118 + Documentation/git-cvsimport.adoc | 228 + Documentation/git-cvsserver.adoc | 433 + Documentation/git-daemon.adoc | 341 + Documentation/git-describe.adoc | 211 + Documentation/git-diagnose.adoc | 65 + Documentation/git-diff-files.adoc | 52 + Documentation/git-diff-index.adoc | 127 + Documentation/git-diff-tree.adoc | 131 + Documentation/git-diff.adoc | 252 + Documentation/git-difftool.adoc | 139 + Documentation/git-fast-export.adoc | 284 + Documentation/git-fast-import.adoc | 1591 + Documentation/git-fetch-pack.adoc | 136 + Documentation/git-fetch.adoc | 317 + Documentation/git-filter-branch.adoc | 703 + Documentation/git-fmt-merge-msg.adoc | 82 + Documentation/git-for-each-ref.adoc | 549 + Documentation/git-for-each-repo.adoc | 68 + Documentation/git-format-patch.adoc | 797 + Documentation/git-fsck-objects.adoc | 22 + Documentation/git-fsck.adoc | 181 + Documentation/git-fsmonitor--daemon.adoc | 106 + Documentation/git-gc.adoc | 178 + Documentation/git-get-tar-commit-id.adoc | 30 + Documentation/git-grep.adoc | 360 + Documentation/git-gui.adoc | 121 + Documentation/git-hash-object.adoc | 65 + Documentation/git-help.adoc | 231 + Documentation/git-hook.adoc | 50 + Documentation/git-http-backend.adoc | 301 + Documentation/git-http-fetch.adoc | 62 + Documentation/git-http-push.adoc | 96 + Documentation/git-imap-send.adoc | 146 + Documentation/git-index-pack.adoc | 162 + Documentation/git-init-db.adoc | 23 + Documentation/git-init.adoc | 189 + Documentation/git-instaweb.adoc | 94 + Documentation/git-interpret-trailers.adoc | 523 + Documentation/git-log.adoc | 220 + Documentation/git-ls-files.adoc | 344 + Documentation/git-ls-remote.adoc | 157 + Documentation/git-ls-tree.adoc | 165 + Documentation/git-mailinfo.adoc | 127 + Documentation/git-mailsplit.adoc | 57 + Documentation/git-maintenance.adoc | 419 + Documentation/git-merge-base.adoc | 247 + Documentation/git-merge-file.adoc | 122 + Documentation/git-merge-index.adoc | 83 + Documentation/git-merge-one-file.adoc | 21 + Documentation/git-merge-tree.adoc | 330 + Documentation/git-merge.adoc | 413 + Documentation/git-mergetool--lib.adoc | 53 + Documentation/git-mergetool.adoc | 130 + Documentation/git-mktag.adoc | 66 + Documentation/git-mktree.adoc | 40 + Documentation/git-multi-pack-index.adoc | 147 + Documentation/git-mv.adoc | 69 + Documentation/git-name-rev.adoc | 112 + Documentation/git-notes.adoc | 386 + Documentation/git-p4.adoc | 803 + Documentation/git-pack-objects.adoc | 460 + Documentation/git-pack-redundant.adoc | 64 + Documentation/git-pack-refs.adoc | 109 + Documentation/git-patch-id.adoc | 69 + Documentation/git-prune-packed.adoc | 47 + Documentation/git-prune.adoc | 89 + Documentation/git-pull.adoc | 254 + Documentation/git-push.adoc | 709 + Documentation/git-quiltimport.adoc | 64 + Documentation/git-range-diff.adoc | 312 + Documentation/git-read-tree.adoc | 437 + Documentation/git-rebase.adoc | 1304 + Documentation/git-receive-pack.adoc | 261 + Documentation/git-reflog.adoc | 138 + Documentation/git-refs.adoc | 72 + Documentation/git-remote-ext.adoc | 125 + Documentation/git-remote-fd.adoc | 59 + Documentation/git-remote-helpers.txto | 9 + Documentation/git-remote.adoc | 269 + Documentation/git-repack.adoc | 279 + Documentation/git-replace.adoc | 161 + Documentation/git-replay.adoc | 127 + Documentation/git-request-pull.adoc | 79 + Documentation/git-rerere.adoc | 222 + Documentation/git-reset.adoc | 506 + Documentation/git-restore.adoc | 222 + Documentation/git-rev-list.adoc | 129 + Documentation/git-rev-parse.adoc | 516 + Documentation/git-revert.adoc | 168 + Documentation/git-rm.adoc | 204 + Documentation/git-send-email.adoc | 543 + Documentation/git-send-pack.adoc | 157 + Documentation/git-sh-i18n--envsubst.adoc | 36 + Documentation/git-sh-i18n.adoc | 43 + Documentation/git-sh-setup.adoc | 95 + Documentation/git-shell.adoc | 106 + Documentation/git-shortlog.adoc | 130 + Documentation/git-show-branch.adoc | 211 + Documentation/git-show-index.adoc | 52 + Documentation/git-show-ref.adoc | 214 + Documentation/git-show.adoc | 90 + Documentation/git-sparse-checkout.adoc | 483 + Documentation/git-stage.adoc | 23 + Documentation/git-stash.adoc | 406 + Documentation/git-status.adoc | 529 + Documentation/git-stripspace.adoc | 94 + Documentation/git-submodule.adoc | 473 + Documentation/git-svn.adoc | 1174 + Documentation/git-switch.adoc | 287 + Documentation/git-symbolic-ref.adoc | 82 + Documentation/git-tag.adoc | 418 + Documentation/git-tools.adoc | 10 + Documentation/git-unpack-file.adoc | 28 + Documentation/git-unpack-objects.adoc | 52 + Documentation/git-update-index.adoc | 613 + Documentation/git-update-ref.adoc | 199 + Documentation/git-update-server-info.adoc | 41 + Documentation/git-upload-archive.adoc | 62 + Documentation/git-upload-pack.adoc | 95 + Documentation/git-var.adoc | 105 + Documentation/git-verify-commit.adoc | 32 + Documentation/git-verify-pack.adoc | 53 + Documentation/git-verify-tag.adoc | 32 + Documentation/git-version.adoc | 28 + Documentation/git-web--browse.adoc | 124 + Documentation/git-whatchanged.adoc | 43 + Documentation/git-worktree.adoc | 529 + Documentation/git-write-tree.adoc | 42 + Documentation/git.adoc | 1190 + Documentation/gitattributes.adoc | 1374 + Documentation/gitcli.adoc | 269 + Documentation/gitcore-tutorial.adoc | 1660 + Documentation/gitcredentials.adoc | 336 + Documentation/gitcvs-migration.adoc | 206 + Documentation/gitdiffcore.adoc | 333 + Documentation/giteveryday.adoc | 455 + Documentation/gitfaq.adoc | 542 + Documentation/gitformat-bundle.adoc | 111 + Documentation/gitformat-chunk.adoc | 133 + Documentation/gitformat-commit-graph.adoc | 186 + Documentation/gitformat-index.adoc | 424 + Documentation/gitformat-pack.adoc | 681 + Documentation/gitformat-signature.adoc | 229 + Documentation/gitglossary.adoc | 27 + Documentation/githooks.adoc | 767 + Documentation/gitignore.adoc | 243 + Documentation/gitk.adoc | 188 + Documentation/gitmailmap.adoc | 130 + Documentation/gitmodules.adoc | 135 + Documentation/gitnamespaces.adoc | 68 + Documentation/gitpacking.adoc | 195 + Documentation/gitprotocol-capabilities.adoc | 396 + Documentation/gitprotocol-common.adoc | 118 + Documentation/gitprotocol-http.adoc | 543 + Documentation/gitprotocol-pack.adoc | 725 + Documentation/gitprotocol-v2.adoc | 786 + Documentation/gitremote-helpers.adoc | 562 + Documentation/gitrepository-layout.adoc | 311 + Documentation/gitrevisions.adoc | 36 + Documentation/gitsubmodules.adoc | 287 + Documentation/gittutorial-2.adoc | 436 + Documentation/gittutorial.adoc | 676 + Documentation/gitweb.adoc | 703 + Documentation/gitweb.conf.adoc | 981 + Documentation/gitworkflows.adoc | 479 + Documentation/glossary-content.adoc | 766 + Documentation/howto-index.adoc | 6 + .../howto/coordinate-embargoed-releases.adoc | 246 + Documentation/howto/howto-index.sh | 56 + .../howto/keep-canonical-history-correct.adoc | 216 + Documentation/howto/maintain-git.adoc | 595 + Documentation/howto/meson.build | 62 + Documentation/howto/new-command.adoc | 106 + .../howto/rebase-from-internal-branch.adoc | 164 + .../howto/rebuild-from-update-hook.adoc | 90 + .../howto/recover-corrupted-blob-object.adoc | 144 + .../recover-corrupted-object-harder.adoc | 479 + .../howto/revert-a-faulty-merge.adoc | 273 + Documentation/howto/revert-branch-rebase.adoc | 187 + .../howto/separating-topic-branches.adoc | 94 + .../howto/setup-git-server-over-http.adoc | 285 + Documentation/howto/update-hook-example.adoc | 192 + Documentation/howto/use-git-daemon.adoc | 54 + Documentation/howto/using-merge-subtree.adoc | 75 + .../using-signed-tag-in-pull-request.adoc | 217 + Documentation/i18n.adoc | 70 + .../includes/cmd-config-section-all.txt | 3 + .../includes/cmd-config-section-rest.txt | 3 + Documentation/install-doc-quick.sh | 40 + Documentation/install-webdoc.sh | 39 + Documentation/line-range-format.adoc | 32 + Documentation/line-range-options.adoc | 15 + Documentation/lint-fsck-msgids.perl | 70 + Documentation/lint-gitlink.perl | 69 + Documentation/lint-man-end-blurb.perl | 24 + Documentation/lint-man-section-order.perl | 108 + Documentation/lint-manpages.sh | 108 + Documentation/manpage-bold-literal.xsl | 16 + Documentation/manpage-normal.xsl | 14 + Documentation/manpage.xsl | 3 + Documentation/merge-options.adoc | 210 + Documentation/merge-strategies.adoc | 153 + Documentation/mergetools/vimdiff.txt | 195 + Documentation/meson.build | 504 + Documentation/object-format-disclaimer.adoc | 9 + Documentation/pretty-formats.adoc | 388 + Documentation/pretty-options.adoc | 102 + Documentation/pull-fetch-param.adoc | 120 + Documentation/ref-reachability-filters.adoc | 7 + Documentation/ref-storage-format.adoc | 3 + Documentation/rerere-options.adoc | 9 + Documentation/rev-list-description.adoc | 61 + Documentation/rev-list-options.adoc | 1216 + Documentation/revisions.adoc | 421 + Documentation/scalar.adoc | 179 + Documentation/sequencer.adoc | 16 + Documentation/signoff-option.adoc | 18 + Documentation/technical/.gitignore | 1 + .../technical/api-error-handling.adoc | 103 + Documentation/technical/api-index-skel.adoc | 13 + Documentation/technical/api-index.sh | 39 + Documentation/technical/api-merge.adoc | 36 + .../technical/api-parse-options.adoc | 349 + Documentation/technical/api-path-walk.adoc | 63 + Documentation/technical/api-simple-ipc.adoc | 105 + Documentation/technical/api-trace2.adoc | 1352 + Documentation/technical/bitmap-format.adoc | 398 + Documentation/technical/build-systems.adoc | 224 + Documentation/technical/bundle-uri.adoc | 572 + Documentation/technical/commit-graph.adoc | 401 + .../technical/directory-rename-detection.adoc | 118 + .../technical/hash-function-transition.adoc | 830 + .../long-running-process-protocol.adoc | 50 + Documentation/technical/meson.build | 67 + Documentation/technical/multi-pack-index.adoc | 203 + Documentation/technical/pack-heuristics.adoc | 460 + Documentation/technical/packfile-uri.adoc | 82 + .../technical/parallel-checkout.adoc | 270 + Documentation/technical/partial-clone.adoc | 367 + Documentation/technical/platform-support.adoc | 190 + Documentation/technical/racy-git.adoc | 201 + Documentation/technical/reftable.adoc | 1098 + .../technical/remembering-renames.adoc | 671 + .../technical/repository-version.adoc | 70 + Documentation/technical/rerere.adoc | 186 + Documentation/technical/scalar.adoc | 66 + .../technical/send-pack-pipeline.adoc | 63 + Documentation/technical/shallow.adoc | 60 + Documentation/technical/sparse-checkout.adoc | 1103 + Documentation/technical/sparse-index.adoc | 208 + Documentation/technical/trivial-merge.adoc | 121 + Documentation/technical/unit-tests.adoc | 242 + Documentation/texi.xsl | 26 + Documentation/trace2-target-values.adoc | 12 + Documentation/transfer-data-leaks.adoc | 30 + Documentation/urls-remotes.adoc | 96 + Documentation/urls.adoc | 110 + Documentation/user-manual.adoc | 4638 +++ GIT-BUILD-OPTIONS.in | 48 + GIT-VERSION-FILE.in | 1 + GIT-VERSION-GEN | 96 + INSTALL | 236 + LGPL-2.1 | 511 + Makefile | 3889 ++ README.md | 74 + RelNotes | 1 + SECURITY.md | 51 + abspath.c | 327 + abspath.h | 54 + aclocal.m4 | 40 + add-interactive.c | 1211 + add-interactive.h | 41 + add-patch.c | 1820 + advice.c | 313 + advice.h | 86 + alias.c | 139 + alias.h | 15 + alloc.c | 123 + alloc.h | 20 + apply.c | 5163 +++ apply.h | 190 + archive-tar.c | 550 + archive-zip.c | 659 + archive.c | 809 + archive.h | 63 + attr.c | 1348 + attr.h | 286 + banned.h | 44 + base85.c | 132 + base85.h | 7 + bin-wrappers/.gitignore | 9 + bin-wrappers/meson.build | 28 + bin-wrappers/wrap-for-bin.sh | 37 + bisect.c | 1224 + bisect.h | 85 + blame.c | 2953 ++ blame.h | 191 + blob.c | 18 + blob.h | 24 + block-sha1/sha1.c | 230 + block-sha1/sha1.h | 24 + bloom.c | 542 + bloom.h | 140 + branch.c | 860 + branch.h | 158 + builtin.h | 257 + builtin/add.c | 593 + builtin/am.c | 2544 ++ builtin/annotate.c | 36 + builtin/apply.c | 46 + builtin/archive.c | 117 + builtin/bisect.c | 1470 + builtin/blame.c | 1247 + builtin/branch.c | 1023 + builtin/bugreport.c | 208 + builtin/bundle.c | 255 + builtin/cat-file.c | 1101 + builtin/check-attr.c | 207 + builtin/check-ignore.c | 201 + builtin/check-mailmap.c | 86 + builtin/check-ref-format.c | 100 + builtin/checkout--worker.c | 153 + builtin/checkout-index.c | 350 + builtin/checkout.c | 2085 ++ builtin/clean.c | 1099 + builtin/clone.c | 1596 + builtin/column.c | 68 + builtin/commit-graph.c | 359 + builtin/commit-tree.c | 151 + builtin/commit.c | 1927 + builtin/config.c | 1436 + builtin/count-objects.c | 177 + builtin/credential-cache--daemon.c | 354 + builtin/credential-cache.c | 207 + builtin/credential-store.c | 227 + builtin/credential.c | 51 + builtin/describe.c | 743 + builtin/diagnose.c | 70 + builtin/diff-files.c | 93 + builtin/diff-index.c | 85 + builtin/diff-tree.c | 238 + builtin/diff.c | 635 + builtin/difftool.c | 804 + builtin/fast-export.c | 1315 + builtin/fast-import.c | 3690 ++ builtin/fetch-pack.c | 304 + builtin/fetch.c | 2693 ++ builtin/fmt-merge-msg.c | 78 + builtin/for-each-ref.c | 114 + builtin/for-each-repo.c | 75 + builtin/fsck.c | 1119 + builtin/fsmonitor--daemon.c | 1606 + builtin/gc.c | 3015 ++ builtin/get-tar-commit-id.c | 58 + builtin/grep.c | 1286 + builtin/hash-object.c | 180 + builtin/help.c | 734 + builtin/hook.c | 86 + builtin/index-pack.c | 2130 ++ builtin/init-db.c | 260 + builtin/interpret-trailers.c | 247 + builtin/log.c | 2721 ++ builtin/ls-files.c | 768 + builtin/ls-remote.c | 179 + builtin/ls-tree.c | 451 + builtin/mailinfo.c | 119 + builtin/mailsplit.c | 377 + builtin/merge-base.c | 207 + builtin/merge-file.c | 190 + builtin/merge-index.c | 131 + builtin/merge-ours.c | 38 + builtin/merge-recursive.c | 100 + builtin/merge-tree.c | 680 + builtin/merge.c | 1825 + builtin/mktag.c | 115 + builtin/mktree.c | 208 + builtin/multi-pack-index.c | 308 + builtin/mv.c | 593 + builtin/name-rev.c | 690 + builtin/notes.c | 1162 + builtin/pack-objects.c | 4704 +++ builtin/pack-redundant.c | 705 + builtin/pack-refs.c | 61 + builtin/patch-id.c | 262 + builtin/prune-packed.c | 35 + builtin/prune.c | 219 + builtin/pull.c | 1167 + builtin/push.c | 672 + builtin/range-diff.c | 175 + builtin/read-tree.c | 289 + builtin/rebase.c | 1892 + builtin/receive-pack.c | 2641 ++ builtin/reflog.c | 479 + builtin/refs.c | 120 + builtin/remote-ext.c | 211 + builtin/remote-fd.c | 88 + builtin/remote.c | 1858 + builtin/repack.c | 1587 + builtin/replace.c | 640 + builtin/replay.c | 463 + builtin/rerere.c | 129 + builtin/reset.c | 534 + builtin/rev-list.c | 831 + builtin/rev-parse.c | 1177 + builtin/revert.c | 306 + builtin/rm.c | 449 + builtin/send-pack.c | 350 + builtin/shortlog.c | 534 + builtin/show-branch.c | 1004 + builtin/show-index.c | 125 + builtin/show-ref.c | 343 + builtin/sparse-checkout.c | 1090 + builtin/stash.c | 1948 + builtin/stripspace.c | 73 + builtin/submodule--helper.c | 3601 ++ builtin/symbolic-ref.c | 97 + builtin/tag.c | 709 + builtin/unpack-file.c | 49 + builtin/unpack-objects.c | 689 + builtin/update-index.c | 1256 + builtin/update-ref.c | 805 + builtin/update-server-info.c | 31 + builtin/upload-archive.c | 147 + builtin/upload-pack.c | 89 + builtin/var.c | 247 + builtin/verify-commit.c | 84 + builtin/verify-pack.c | 95 + builtin/verify-tag.c | 73 + builtin/worktree.c | 1441 + builtin/write-tree.c | 66 + bulk-checkin.c | 390 + bulk-checkin.h | 39 + bundle-uri.c | 954 + bundle-uri.h | 168 + bundle.c | 632 + bundle.h | 72 + cache-tree.c | 1028 + cache-tree.h | 55 + cbtree.c | 136 + cbtree.h | 54 + chdir-notify.c | 96 + chdir-notify.h | 73 + check-builtins.sh | 34 + checkout.c | 75 + checkout.h | 15 + chunk-format.c | 215 + chunk-format.h | 73 + ci/check-directional-formatting.bash | 27 + ci/check-whitespace.sh | 101 + ci/config/README | 14 + ci/install-dependencies.sh | 160 + ci/install-sdk.ps1 | 12 + ci/lib.sh | 399 + ci/make-test-artifacts.sh | 12 + ci/mount-fileshare.sh | 25 + ci/print-test-failures.sh | 94 + ci/run-build-and-minimal-fuzzers.sh | 31 + ci/run-build-and-tests.sh | 77 + ci/run-static-analysis.sh | 34 + ci/run-style-check.sh | 25 + ci/run-test-slice.sh | 23 + ci/test-documentation.sh | 46 + ci/util/extract-trash-dirs.sh | 50 + color.c | 489 + color.h | 140 + column.c | 412 + column.h | 46 + combine-diff.c | 1669 + command-list.txt | 242 + commit-graph.c | 2924 ++ commit-graph.h | 216 + commit-reach.c | 1363 + commit-reach.h | 159 + commit-slab-decl.h | 44 + commit-slab-impl.h | 105 + commit-slab.h | 66 + commit.c | 1961 + commit.h | 376 + common-main.c | 92 + compat/.gitattributes | 1 + compat/access.c | 31 + compat/apple-common-crypto.h | 96 + compat/basename.c | 83 + compat/bswap.h | 193 + compat/compiler.h | 40 + compat/disk.h | 57 + compat/fileno.c | 7 + compat/fopen.c | 37 + compat/fsmonitor/fsm-darwin-gcc.h | 90 + compat/fsmonitor/fsm-health-darwin.c | 24 + compat/fsmonitor/fsm-health-win32.c | 280 + compat/fsmonitor/fsm-health.h | 47 + compat/fsmonitor/fsm-ipc-darwin.c | 59 + compat/fsmonitor/fsm-ipc-win32.c | 11 + compat/fsmonitor/fsm-listen-darwin.c | 545 + compat/fsmonitor/fsm-listen-win32.c | 879 + compat/fsmonitor/fsm-listen.h | 49 + compat/fsmonitor/fsm-path-utils-darwin.c | 138 + compat/fsmonitor/fsm-path-utils-win32.c | 148 + compat/fsmonitor/fsm-settings-darwin.c | 63 + compat/fsmonitor/fsm-settings-win32.c | 37 + compat/hstrerror.c | 21 + compat/inet_ntop.c | 185 + compat/inet_pton.c | 215 + compat/linux/procinfo.c | 176 + compat/memmem.c | 32 + compat/mingw.c | 3338 ++ compat/mingw.h | 639 + compat/mkdir.c | 24 + compat/mkdtemp.c | 8 + compat/mmap.c | 45 + compat/msvc.c | 6 + compat/msvc.h | 33 + compat/nedmalloc/License.txt | 23 + compat/nedmalloc/Readme.txt | 136 + compat/nedmalloc/malloc.c.h | 5761 +++ compat/nedmalloc/nedmalloc.c | 954 + compat/nedmalloc/nedmalloc.h | 180 + compat/nonblock.c | 50 + compat/nonblock.h | 9 + compat/obstack.c | 413 + compat/obstack.h | 511 + compat/open.c | 25 + compat/poll/poll.c | 610 + compat/poll/poll.h | 67 + compat/pread.c | 19 + compat/precompose_utf8.c | 202 + compat/precompose_utf8.h | 47 + compat/qsort_s.c | 63 + compat/regcomp_enhanced.c | 9 + compat/regex/regcomp.c | 3893 ++ compat/regex/regex.c | 90 + compat/regex/regex.h | 586 + compat/regex/regex_internal.c | 1743 + compat/regex/regex_internal.h | 808 + compat/regex/regexec.c | 4368 +++ compat/setenv.c | 40 + compat/sha1-chunked.c | 20 + compat/sha1-chunked.h | 2 + compat/simple-ipc/ipc-shared.c | 30 + compat/simple-ipc/ipc-unix-socket.c | 1048 + compat/simple-ipc/ipc-win32.c | 944 + compat/snprintf.c | 69 + compat/stat.c | 48 + compat/strcasestr.c | 22 + compat/strdup.c | 11 + compat/strlcpy.c | 13 + compat/strtoimax.c | 10 + compat/strtoumax.c | 10 + compat/stub/procinfo.c | 11 + compat/terminal.c | 620 + compat/terminal.h | 27 + compat/unsetenv.c | 29 + compat/vcbuild/.gitignore | 3 + compat/vcbuild/README | 112 + compat/vcbuild/find_vs_env.bat | 168 + compat/vcbuild/include/sys/param.h | 1 + compat/vcbuild/include/sys/time.h | 1 + compat/vcbuild/include/sys/utime.h | 34 + compat/vcbuild/include/unistd.h | 107 + compat/vcbuild/include/utime.h | 1 + compat/vcbuild/scripts/clink.pl | 133 + compat/vcbuild/scripts/lib.pl | 26 + compat/vcbuild/vcpkg_copy_dlls.bat | 39 + compat/vcbuild/vcpkg_install.bat | 80 + compat/win32.h | 41 + compat/win32/alloca.h | 1 + compat/win32/dirent.c | 92 + compat/win32/dirent.h | 20 + compat/win32/flush.c | 28 + compat/win32/git.manifest | 25 + compat/win32/headless.c | 118 + compat/win32/lazyload.h | 61 + compat/win32/path-utils.c | 91 + compat/win32/path-utils.h | 37 + compat/win32/pthread.c | 61 + compat/win32/pthread.h | 100 + compat/win32/syslog.c | 83 + compat/win32/syslog.h | 20 + compat/win32/trace2_win32_process_info.c | 195 + compat/win32mmap.c | 48 + compat/winansi.c | 685 + compat/zlib-uncompress2.c | 96 + config.c | 3812 ++ config.h | 848 + config.mak.dev | 101 + config.mak.in | 24 + config.mak.uname | 837 + configure.ac | 1295 + connect.c | 1527 + connect.h | 33 + connected.c | 167 + connected.h | 72 + contrib/README | 43 + contrib/buildsystems/CMakeLists.txt | 1243 + contrib/buildsystems/Generators.pm | 42 + contrib/buildsystems/Generators/QMake.pm | 189 + contrib/buildsystems/Generators/Vcproj.pm | 579 + contrib/buildsystems/Generators/Vcxproj.pm | 402 + contrib/buildsystems/engine.pl | 395 + contrib/buildsystems/generate | 29 + contrib/buildsystems/git-version.in | 1 + contrib/buildsystems/parse.pl | 228 + contrib/coccinelle/.gitignore | 1 + contrib/coccinelle/README | 124 + contrib/coccinelle/array.cocci | 103 + contrib/coccinelle/commit.cocci | 52 + .../coccinelle/config_fn_ctx.pending.cocci | 144 + contrib/coccinelle/equals-null.cocci | 30 + contrib/coccinelle/flex_alloc.cocci | 13 + contrib/coccinelle/free.cocci | 45 + contrib/coccinelle/git_config_number.cocci | 27 + contrib/coccinelle/hashmap.cocci | 16 + contrib/coccinelle/index-compatibility.cocci | 157 + contrib/coccinelle/object_id.cocci | 75 + contrib/coccinelle/preincr.cocci | 5 + contrib/coccinelle/qsort.cocci | 37 + contrib/coccinelle/refs.cocci | 103 + contrib/coccinelle/spatchcache | 304 + contrib/coccinelle/strbuf.cocci | 62 + contrib/coccinelle/swap.cocci | 28 + contrib/coccinelle/tests/free.c | 11 + contrib/coccinelle/tests/free.res | 9 + contrib/coccinelle/the_repository.cocci | 123 + contrib/coccinelle/xcalloc.cocci | 10 + contrib/coccinelle/xopen.cocci | 19 + contrib/coccinelle/xstrdup_or_null.cocci | 5 + contrib/coccinelle/xstrncmpz.cocci | 28 + contrib/completion/.gitattributes | 1 + contrib/completion/git-completion.bash | 3984 +++ contrib/completion/git-completion.tcsh | 127 + contrib/completion/git-completion.zsh | 295 + contrib/completion/git-prompt.sh | 672 + contrib/completion/meson.build | 16 + contrib/contacts/.gitignore | 3 + contrib/contacts/Makefile | 71 + contrib/contacts/git-contacts | 203 + contrib/contacts/git-contacts.txt | 94 + contrib/coverage-diff.sh | 103 + contrib/credential/libsecret/.gitignore | 1 + contrib/credential/libsecret/Makefile | 25 + .../libsecret/git-credential-libsecret.c | 454 + contrib/credential/netrc/.gitignore | 1 + contrib/credential/netrc/Makefile | 30 + .../netrc/git-credential-netrc.perl | 443 + .../netrc/t-git-credential-netrc.sh | 22 + .../credential/netrc/test.command-option-gpg | 2 + contrib/credential/netrc/test.git-config-gpg | 2 + contrib/credential/netrc/test.netrc | 13 + contrib/credential/netrc/test.netrc.gpg | 0 contrib/credential/netrc/test.pl | 139 + contrib/credential/osxkeychain/.gitignore | 1 + contrib/credential/osxkeychain/Makefile | 18 + .../osxkeychain/git-credential-osxkeychain.c | 447 + contrib/credential/wincred/Makefile | 22 + .../wincred/git-credential-wincred.c | 352 + contrib/diff-highlight/.gitignore | 2 + contrib/diff-highlight/DiffHighlight.pm | 285 + contrib/diff-highlight/Makefile | 23 + contrib/diff-highlight/README | 223 + contrib/diff-highlight/diff-highlight.perl | 8 + contrib/diff-highlight/t/.gitignore | 2 + contrib/diff-highlight/t/Makefile | 22 + .../diff-highlight/t/t9400-diff-highlight.sh | 341 + contrib/emacs/README | 33 + contrib/emacs/git-blame.el | 6 + contrib/emacs/git.el | 6 + contrib/examples/README | 20 + contrib/fast-import/git-import.perl | 64 + contrib/fast-import/git-import.sh | 38 + contrib/fast-import/git-p4.README | 12 + contrib/fast-import/import-directories.perl | 416 + contrib/fast-import/import-tars.perl | 227 + contrib/fast-import/import-zips.py | 78 + contrib/git-jump/README | 123 + contrib/git-jump/git-jump | 117 + contrib/git-resurrect.sh | 181 + contrib/git-shell-commands/README | 18 + contrib/git-shell-commands/help | 18 + contrib/git-shell-commands/list | 10 + contrib/hooks/multimail/README.Git | 7 + contrib/hooks/post-receive-email | 759 + contrib/hooks/pre-auto-gc-battery | 42 + contrib/hooks/setgitperms.perl | 214 + contrib/hooks/update-paranoid | 421 + contrib/long-running-filter/example.pl | 132 + contrib/meson.build | 3 + contrib/mw-to-git/.gitignore | 2 + contrib/mw-to-git/.perlcriticrc | 28 + contrib/mw-to-git/Git/Mediawiki.pm | 101 + contrib/mw-to-git/Makefile | 58 + contrib/mw-to-git/bin-wrapper/git | 14 + contrib/mw-to-git/git-mw.perl | 368 + contrib/mw-to-git/git-remote-mediawiki.perl | 1390 + contrib/mw-to-git/git-remote-mediawiki.txt | 7 + contrib/mw-to-git/t/.gitignore | 4 + contrib/mw-to-git/t/Makefile | 31 + contrib/mw-to-git/t/README | 124 + contrib/mw-to-git/t/install-wiki.sh | 55 + contrib/mw-to-git/t/push-pull-tests.sh | 144 + contrib/mw-to-git/t/t9360-mw-to-git-clone.sh | 257 + .../mw-to-git/t/t9361-mw-to-git-push-pull.sh | 24 + contrib/mw-to-git/t/t9362-mw-to-git-utf8.sh | 347 + .../t/t9363-mw-to-git-export-import.sh | 218 + contrib/mw-to-git/t/t9364-pull-by-rev.sh | 17 + .../mw-to-git/t/t9365-continuing-queries.sh | 23 + contrib/mw-to-git/t/test-gitmw-lib.sh | 432 + contrib/mw-to-git/t/test-gitmw.pl | 223 + contrib/mw-to-git/t/test.config | 40 + contrib/persistent-https/LICENSE | 202 + contrib/persistent-https/Makefile | 40 + contrib/persistent-https/README | 72 + contrib/persistent-https/client.go | 189 + contrib/persistent-https/main.go | 82 + contrib/persistent-https/proxy.go | 190 + contrib/persistent-https/socket.go | 97 + contrib/remote-helpers/README | 15 + contrib/remote-helpers/git-remote-bzr | 11 + contrib/remote-helpers/git-remote-hg | 11 + contrib/remotes2config.sh | 33 + contrib/rerere-train.sh | 102 + contrib/stats/git-common-hash | 26 + contrib/stats/mailmap.pl | 70 + contrib/stats/packinfo.pl | 212 + contrib/subtree/.gitignore | 9 + contrib/subtree/COPYING | 339 + contrib/subtree/INSTALL | 28 + contrib/subtree/Makefile | 110 + contrib/subtree/README | 8 + contrib/subtree/git-subtree.sh | 1132 + contrib/subtree/git-subtree.txt | 353 + contrib/subtree/meson.build | 71 + contrib/subtree/t/Makefile | 85 + contrib/subtree/t/t7900-subtree.sh | 1566 + contrib/subtree/todo | 48 + contrib/thunderbird-patch-inline/README | 20 + contrib/thunderbird-patch-inline/appp.sh | 55 + contrib/update-unicode/.gitignore | 3 + contrib/update-unicode/README | 20 + contrib/update-unicode/update_unicode.sh | 33 + contrib/vscode/.gitattributes | 1 + contrib/vscode/README.md | 18 + contrib/vscode/init.sh | 377 + contrib/workdir/.gitattributes | 1 + contrib/workdir/git-new-workdir | 105 + convert.c | 2060 ++ convert.h | 240 + copy.c | 72 + copy.h | 10 + credential.c | 710 + credential.h | 311 + csum-file.c | 253 + csum-file.h | 96 + ctype.c | 30 + daemon.c | 1466 + date.c | 1420 + date.h | 73 + decorate.c | 101 + decorate.h | 71 + delta-islands.c | 559 + delta-islands.h | 19 + delta.h | 104 + detect-compiler | 58 + diagnose.c | 282 + diagnose.h | 21 + diff-delta.c | 498 + diff-lib.c | 729 + diff-merges.c | 192 + diff-merges.h | 28 + diff-no-index.c | 374 + diff.c | 7391 ++++ diff.h | 710 + diffcore-break.c | 313 + diffcore-delta.c | 236 + diffcore-order.c | 129 + diffcore-pickaxe.c | 292 + diffcore-rename.c | 1723 + diffcore-rotate.c | 47 + diffcore.h | 236 + dir-iterator.c | 307 + dir-iterator.h | 117 + dir.c | 4138 +++ dir.h | 677 + editor.c | 167 + editor.h | 35 + entry.c | 613 + entry.h | 71 + environment.c | 254 + environment.h | 228 + ewah/bitmap.c | 311 + ewah/ewah_bitmap.c | 475 + ewah/ewah_io.c | 137 + ewah/ewah_rlw.c | 109 + ewah/ewok.h | 202 + ewah/ewok_rlw.h | 114 + exec-cmd.c | 396 + exec-cmd.h | 16 + fetch-negotiator.c | 30 + fetch-negotiator.h | 67 + fetch-pack.c | 2271 ++ fetch-pack.h | 120 + fmt-merge-msg.c | 723 + fmt-merge-msg.h | 22 + fsck.c | 1391 + fsck.h | 291 + fsmonitor--daemon.h | 171 + fsmonitor-ipc.c | 176 + fsmonitor-ipc.h | 50 + fsmonitor-ll.h | 52 + fsmonitor-path-utils.h | 60 + fsmonitor-settings.c | 290 + fsmonitor-settings.h | 54 + fsmonitor.c | 822 + fsmonitor.h | 71 + generate-cmdlist.sh | 120 + generate-configlist.sh | 31 + generate-hooklist.sh | 33 + generate-perl.sh | 37 + generate-python.sh | 20 + generate-script.sh | 34 + gettext.c | 159 + gettext.h | 69 + git-archimport.perl | 1134 + git-compat-util.h | 1598 + git-curl-compat.h | 48 + git-cvsexportcommit.perl | 467 + git-cvsimport.perl | 1183 + git-cvsserver.perl | 5128 +++ git-difftool--helper.sh | 125 + git-filter-branch.sh | 664 + git-gui/.gitattributes | 6 + git-gui/.gitignore | 8 + git-gui/GIT-VERSION-GEN | 80 + git-gui/Makefile | 334 + git-gui/README.md | 174 + git-gui/git-gui--askpass | 84 + git-gui/git-gui.sh | 4147 +++ git-gui/lib/about.tcl | 70 + git-gui/lib/blame.tcl | 1374 + git-gui/lib/branch.tcl | 40 + git-gui/lib/branch_checkout.tcl | 93 + git-gui/lib/branch_create.tcl | 224 + git-gui/lib/branch_delete.tcl | 147 + git-gui/lib/branch_rename.tcl | 134 + git-gui/lib/browser.tcl | 322 + git-gui/lib/checkout_op.tcl | 646 + git-gui/lib/choose_font.tcl | 171 + git-gui/lib/choose_repository.tcl | 1124 + git-gui/lib/choose_rev.tcl | 634 + git-gui/lib/chord.tcl | 158 + git-gui/lib/class.tcl | 194 + git-gui/lib/commit.tcl | 557 + git-gui/lib/console.tcl | 225 + git-gui/lib/database.tcl | 115 + git-gui/lib/date.tcl | 53 + git-gui/lib/diff.tcl | 891 + git-gui/lib/encoding.tcl | 466 + git-gui/lib/error.tcl | 119 + git-gui/lib/git-gui.ico | Bin 0 -> 3638 bytes git-gui/lib/index.tcl | 753 + git-gui/lib/line.tcl | 81 + git-gui/lib/logo.tcl | 43 + git-gui/lib/merge.tcl | 285 + git-gui/lib/mergetool.tcl | 417 + git-gui/lib/option.tcl | 349 + git-gui/lib/remote.tcl | 333 + git-gui/lib/remote_add.tcl | 190 + git-gui/lib/remote_branch_delete.tcl | 359 + git-gui/lib/search.tcl | 300 + git-gui/lib/shortcut.tcl | 140 + git-gui/lib/spellcheck.tcl | 415 + git-gui/lib/sshkey.tcl | 131 + git-gui/lib/status_bar.tcl | 312 + git-gui/lib/themed.tcl | 410 + git-gui/lib/tools.tcl | 168 + git-gui/lib/tools_dlg.tcl | 414 + git-gui/lib/transport.tcl | 232 + git-gui/lib/win32.tcl | 26 + git-gui/lib/win32_shortcut.js | 34 + git-gui/macosx/AppMain.tcl | 29 + git-gui/macosx/Info.plist | 30 + git-gui/macosx/git-gui.icns | Bin 0 -> 28866 bytes git-gui/po/.gitignore | 2 + git-gui/po/README | 251 + git-gui/po/bg.po | 2866 ++ git-gui/po/de.po | 2874 ++ git-gui/po/el.po | 2005 ++ git-gui/po/fr.po | 2604 ++ git-gui/po/git-gui.pot | 2666 ++ git-gui/po/glossary/Makefile | 9 + git-gui/po/glossary/bg.po | 287 + git-gui/po/glossary/de.po | 430 + git-gui/po/glossary/el.po | 171 + git-gui/po/glossary/fr.po | 166 + git-gui/po/glossary/git-gui-glossary.pot | 398 + git-gui/po/glossary/git-gui-glossary.txt | 96 + git-gui/po/glossary/it.po | 184 + git-gui/po/glossary/pt_br.po | 169 + git-gui/po/glossary/pt_pt.po | 293 + git-gui/po/glossary/txt-to-pot.sh | 48 + git-gui/po/glossary/zh_cn.po | 170 + git-gui/po/hu.po | 2602 ++ git-gui/po/it.po | 2591 ++ git-gui/po/ja.po | 2685 ++ git-gui/po/nb.po | 2474 ++ git-gui/po/po2msg.sh | 152 + git-gui/po/pt_br.po | 2568 ++ git-gui/po/pt_pt.po | 2716 ++ git-gui/po/ru.po | 2651 ++ git-gui/po/sv.po | 2809 ++ git-gui/po/vi.po | 2690 ++ git-gui/po/zh_cn.po | 1967 + git-gui/windows/git-gui.sh | 25 + git-instaweb.sh | 786 + git-merge-octopus.sh | 112 + git-merge-one-file.sh | 167 + git-merge-resolve.sh | 64 + git-mergetool--lib.sh | 549 + git-mergetool.sh | 579 + git-p4.py | 4628 +++ git-quiltimport.sh | 155 + git-request-pull.sh | 172 + git-send-email.perl | 2281 ++ git-sh-i18n.sh | 79 + git-sh-setup.sh | 358 + git-submodule.sh | 671 + git-svn.perl | 2250 ++ git-web--browse.sh | 196 + git-zlib.c | 274 + git-zlib.h | 28 + git.c | 973 + git.rc.in | 24 + gitk-git/.gitignore | 2 + gitk-git/Makefile | 80 + gitk-git/gitk | 12774 +++++++ gitk-git/po/.gitignore | 1 + gitk-git/po/bg.po | 1447 + gitk-git/po/ca.po | 1369 + gitk-git/po/de.po | 1387 + gitk-git/po/es.po | 1405 + gitk-git/po/fr.po | 1400 + gitk-git/po/hu.po | 1419 + gitk-git/po/it.po | 1387 + gitk-git/po/ja.po | 1379 + gitk-git/po/po2msg.sh | 133 + gitk-git/po/pt_br.po | 1390 + gitk-git/po/pt_pt.po | 1376 + gitk-git/po/ru.po | 1371 + gitk-git/po/sv.po | 1433 + gitk-git/po/vi.po | 1379 + gitk-git/po/zh_cn.po | 1367 + gitweb/GITWEB-BUILD-OPTIONS.in | 24 + gitweb/INSTALL | 328 + gitweb/Makefile | 146 + gitweb/README | 70 + gitweb/generate-gitweb-cgi.sh | 47 + gitweb/generate-gitweb-js.sh | 12 + gitweb/gitweb.perl | 8490 +++++ gitweb/meson.build | 89 + gitweb/static/git-favicon.png | Bin 0 -> 115 bytes gitweb/static/git-logo.png | Bin 0 -> 207 bytes gitweb/static/gitweb.css | 686 + gitweb/static/js/README | 20 + gitweb/static/js/adjust-timezone.js | 330 + gitweb/static/js/blame_incremental.js | 692 + gitweb/static/js/javascript-detection.js | 43 + gitweb/static/js/lib/common-lib.js | 224 + gitweb/static/js/lib/cookies.js | 114 + gitweb/static/js/lib/datetime.js | 176 + gpg-interface.c | 1115 + gpg-interface.h | 95 + graph.c | 1555 + graph.h | 265 + grep.c | 2018 ++ grep.h | 266 + hash-lookup.c | 134 + hash-lookup.h | 32 + hash.h | 444 + hashmap.c | 351 + hashmap.h | 577 + help.c | 859 + help.h | 92 + hex-ll.c | 49 + hex-ll.h | 27 + hex.c | 124 + hex.h | 70 + hook.c | 196 + hook.h | 94 + http-backend.c | 822 + http-fetch.c | 182 + http-push.c | 2002 ++ http-walker.c | 632 + http.c | 2810 ++ http.h | 255 + ident.c | 732 + ident.h | 69 + imap-send.c | 1593 + iterator.h | 81 + json-writer.c | 411 + json-writer.h | 110 + khash.h | 338 + kwset.c | 813 + kwset.h | 67 + levenshtein.c | 86 + levenshtein.h | 8 + line-log.c | 1349 + line-log.h | 63 + line-range.c | 297 + line-range.h | 41 + linear-assignment.c | 207 + linear-assignment.h | 22 + list-objects-filter-options.c | 413 + list-objects-filter-options.h | 165 + list-objects-filter.c | 825 + list-objects-filter.h | 97 + list-objects.c | 446 + list-objects.h | 36 + list.h | 207 + lockfile.c | 218 + lockfile.h | 331 + log-tree.c | 1204 + log-tree.h | 42 + loose.c | 260 + loose.h | 24 + ls-refs.c | 213 + ls-refs.h | 9 + mailinfo.c | 1316 + mailinfo.h | 58 + mailmap.c | 327 + mailmap.h | 22 + match-trees.c | 379 + match-trees.h | 10 + mem-pool.c | 220 + mem-pool.h | 69 + merge-blobs.c | 106 + merge-blobs.h | 11 + merge-ll.c | 470 + merge-ll.h | 114 + merge-ort-wrappers.c | 66 + merge-ort-wrappers.h | 25 + merge-ort.c | 5287 +++ merge-ort.h | 117 + merge-recursive.c | 4080 +++ merge-recursive.h | 132 + merge.c | 113 + merge.h | 17 + mergesort.h | 105 + mergetools/araxis | 26 + mergetools/bc | 37 + mergetools/codecompare | 31 + mergetools/deltawalker | 33 + mergetools/diffmerge | 26 + mergetools/diffuse | 23 + mergetools/ecmerge | 22 + mergetools/emerge | 34 + mergetools/examdiff | 24 + mergetools/guiffy | 26 + mergetools/gvimdiff | 1 + mergetools/kdiff3 | 44 + mergetools/kompare | 19 + mergetools/meld | 97 + mergetools/nvimdiff | 1 + mergetools/opendiff | 22 + mergetools/p4merge | 44 + mergetools/smerge | 20 + mergetools/tkdiff | 24 + mergetools/tortoisemerge | 40 + mergetools/vimdiff | 645 + mergetools/vscode | 19 + mergetools/winmerge | 23 + mergetools/xxdiff | 38 + meson.build | 1955 + meson_options.txt | 99 + midx-write.c | 1788 + midx.c | 1019 + midx.h | 146 + name-hash.c | 758 + name-hash.h | 21 + negotiator/default.c | 200 + negotiator/default.h | 8 + negotiator/noop.c | 45 + negotiator/noop.h | 8 + negotiator/skipping.c | 271 + negotiator/skipping.h | 8 + notes-cache.c | 103 + notes-cache.h | 22 + notes-merge.c | 766 + notes-merge.h | 87 + notes-utils.c | 200 + notes-utils.h | 55 + notes.c | 1379 + notes.h | 347 + object-file-convert.c | 280 + object-file-convert.h | 24 + object-file.c | 3148 ++ object-file.h | 137 + object-name.c | 2186 ++ object-name.h | 133 + object-store-ll.h | 556 + object-store.h | 11 + object.c | 687 + object.h | 347 + oid-array.c | 103 + oid-array.h | 137 + oidmap.c | 62 + oidmap.h | 93 + oidset.c | 94 + oidset.h | 124 + oidtree.c | 109 + oidtree.h | 22 + oss-fuzz/.gitignore | 8 + oss-fuzz/dummy-cmd-main.c | 14 + oss-fuzz/fuzz-commit-graph.c | 32 + oss-fuzz/fuzz-config.c | 33 + oss-fuzz/fuzz-credential-from-url-gently.c | 32 + oss-fuzz/fuzz-date.c | 49 + oss-fuzz/fuzz-pack-headers.c | 15 + oss-fuzz/fuzz-pack-idx.c | 14 + oss-fuzz/fuzz-parse-attr-line.c | 41 + oss-fuzz/fuzz-url-decode-mem.c | 43 + pack-bitmap-write.c | 1083 + pack-bitmap.c | 3070 ++ pack-bitmap.h | 168 + pack-check.c | 203 + pack-mtimes.c | 133 + pack-mtimes.h | 24 + pack-objects.c | 242 + pack-objects.h | 309 + pack-revindex.c | 583 + pack-revindex.h | 148 + pack-write.c | 601 + pack.h | 132 + packfile.c | 2337 ++ packfile.h | 225 + pager.c | 307 + pager.h | 19 + parallel-checkout.c | 677 + parallel-checkout.h | 113 + parse-options-cb.c | 318 + parse-options.c | 1385 + parse-options.h | 610 + parse.c | 211 + parse.h | 21 + patch-delta.c | 94 + patch-ids.c | 136 + patch-ids.h | 47 + path-walk.c | 591 + path-walk.h | 69 + path.c | 1486 + path.h | 330 + pathspec.c | 890 + pathspec.h | 199 + perl/.gitignore | 1 + perl/FromCPAN/.gitattributes | 1 + perl/FromCPAN/Error.pm | 1040 + perl/FromCPAN/Mail/Address.pm | 280 + perl/FromCPAN/Mail/meson.build | 8 + perl/FromCPAN/meson.build | 10 + perl/Git.pm | 1767 + perl/Git/I18N.pm | 125 + perl/Git/IndexInfo.pm | 35 + perl/Git/LoadCPAN.pm | 104 + perl/Git/LoadCPAN/Error.pm | 10 + perl/Git/LoadCPAN/Mail/Address.pm | 10 + perl/Git/LoadCPAN/Mail/meson.build | 8 + perl/Git/LoadCPAN/meson.build | 10 + perl/Git/Packet.pm | 173 + perl/Git/SVN.pm | 2573 ++ perl/Git/SVN/Editor.pm | 605 + perl/Git/SVN/Fetcher.pm | 622 + perl/Git/SVN/GlobSpec.pm | 65 + perl/Git/SVN/Log.pm | 400 + perl/Git/SVN/Memoize/YAML.pm | 93 + perl/Git/SVN/Memoize/meson.build | 8 + perl/Git/SVN/Migration.pm | 265 + perl/Git/SVN/Prompt.pm | 184 + perl/Git/SVN/Ra.pm | 708 + perl/Git/SVN/Utils.pm | 232 + perl/Git/SVN/meson.build | 21 + perl/Git/meson.build | 19 + .../header_templates/fixed_prefix.template.pl | 1 + .../runtime_prefix.template.pl | 42 + perl/meson.build | 13 + pkt-line.c | 711 + pkt-line.h | 254 + po/.gitignore | 3 + po/README.md | 460 + po/TEAMS | 92 + po/bg.po | 24566 +++++++++++++ po/ca.po | 29760 ++++++++++++++++ po/de.po | 24196 +++++++++++++ po/el.po | 21468 +++++++++++ po/es.po | 22396 ++++++++++++ po/fr.po | 24132 +++++++++++++ po/id.po | 29336 +++++++++++++++ po/is.po | 103 + po/it.po | 26670 ++++++++++++++ po/ko.po | 18000 ++++++++++ po/meson.build | 27 + po/pl.po | 27504 ++++++++++++++ po/pt_PT.po | 26666 ++++++++++++++ po/ru.po | 21696 +++++++++++ po/sv.po | 23375 ++++++++++++ po/tr.po | 23521 ++++++++++++ po/uk.po | 23789 ++++++++++++ po/vi.po | 23538 ++++++++++++ po/zh_CN.po | 28890 +++++++++++++++ po/zh_TW.po | 28899 +++++++++++++++ preload-index.c | 186 + preload-index.h | 15 + pretty.c | 2372 ++ pretty.h | 173 + prio-queue.c | 99 + prio-queue.h | 60 + progress.c | 383 + progress.h | 32 + promisor-remote.c | 294 + promisor-remote.h | 35 + prompt.c | 88 + prompt.h | 11 + protocol-caps.c | 115 + protocol-caps.h | 8 + protocol.c | 99 + protocol.h | 55 + prune-packed.c | 49 + prune-packed.h | 9 + pseudo-merge.c | 786 + pseudo-merge.h | 218 + quote.c | 586 + quote.h | 105 + range-diff.c | 630 + range-diff.h | 37 + reachable.c | 406 + reachable.h | 19 + read-cache-ll.h | 489 + read-cache.c | 3999 +++ read-cache.h | 45 + rebase-interactive.c | 250 + rebase-interactive.h | 22 + rebase.c | 37 + rebase.h | 14 + ref-filter.c | 3662 ++ ref-filter.h | 214 + reflog-walk.c | 383 + reflog-walk.h | 27 + reflog.c | 445 + reflog.h | 43 + refs.c | 3118 ++ refs.h | 1172 + refs/debug.c | 452 + refs/files-backend.c | 3870 ++ refs/iterator.c | 472 + refs/packed-backend.c | 1790 + refs/packed-backend.h | 46 + refs/ref-cache.c | 512 + refs/ref-cache.h | 223 + refs/refs-internal.h | 774 + refs/reftable-backend.c | 2680 ++ refspec.c | 278 + refspec.h | 74 + reftable/LICENSE | 31 + reftable/basics.c | 286 + reftable/basics.h | 184 + reftable/block.c | 582 + reftable/block.h | 148 + reftable/blocksource.c | 139 + reftable/blocksource.h | 21 + reftable/constants.h | 22 + reftable/error.c | 46 + reftable/iter.c | 303 + reftable/iter.h | 89 + reftable/merged.c | 303 + reftable/merged.h | 34 + reftable/pq.c | 73 + reftable/pq.h | 40 + reftable/reader.c | 878 + reftable/reader.h | 67 + reftable/record.c | 1319 + reftable/record.h | 164 + reftable/reftable-basics.h | 31 + reftable/reftable-blocksource.h | 52 + reftable/reftable-error.h | 69 + reftable/reftable-iterator.h | 60 + reftable/reftable-merged.h | 61 + reftable/reftable-reader.h | 72 + reftable/reftable-record.h | 110 + reftable/reftable-stack.h | 155 + reftable/reftable-writer.h | 185 + reftable/stack.c | 1809 + reftable/stack.h | 41 + reftable/system.c | 126 + reftable/system.h | 101 + reftable/tree.c | 74 + reftable/tree.h | 45 + reftable/writer.c | 854 + reftable/writer.h | 53 + remote-curl.c | 1659 + remote.c | 3005 ++ remote.h | 464 + replace-object.c | 115 + replace-object.h | 63 + repo-settings.c | 169 + repo-settings.h | 82 + repository.c | 456 + repository.h | 236 + rerere.c | 1274 + rerere.h | 44 + reset.c | 189 + reset.h | 60 + resolve-undo.c | 179 + resolve-undo.h | 25 + revision.c | 4543 +++ revision.h | 565 + run-command.c | 1983 + run-command.h | 581 + sane-ctype.h | 66 + scalar.c | 1002 + send-pack.c | 791 + send-pack.h | 43 + sequencer.c | 6824 ++++ sequencer.h | 274 + serve.c | 346 + serve.h | 9 + server-info.c | 376 + server-info.h | 9 + setup.c | 2640 ++ setup.h | 234 + sh-i18n--envsubst.c | 427 + sha1/openssl.h | 51 + sha1collisiondetection | 1 + sha1dc/.gitattributes | 1 + sha1dc/LICENSE.txt | 30 + sha1dc/sha1.c | 1911 + sha1dc/sha1.h | 110 + sha1dc/ubc_check.c | 372 + sha1dc/ubc_check.h | 52 + sha1dc_git.c | 40 + sha1dc_git.h | 27 + sha256/block/sha256.c | 196 + sha256/block/sha256.h | 24 + sha256/gcrypt.h | 39 + sha256/nettle.h | 31 + sha256/openssl.h | 49 + shallow.c | 858 + shallow.h | 85 + shared.mak | 129 + shell.c | 231 + shortlog.h | 42 + sideband.c | 285 + sideband.h | 33 + sigchain.c | 61 + sigchain.h | 57 + simple-ipc.h | 243 + sparse-index.c | 749 + sparse-index.h | 49 + split-index.c | 492 + split-index.h | 39 + stable-qsort.c | 56 + statinfo.c | 132 + statinfo.h | 97 + strbuf.c | 1088 + strbuf.h | 696 + streaming.c | 551 + streaming.h | 21 + string-list.c | 338 + string-list.h | 284 + strmap.c | 179 + strmap.h | 268 + strvec.c | 149 + strvec.h | 116 + sub-process.c | 217 + sub-process.h | 97 + submodule-config.c | 1052 + submodule-config.h | 142 + submodule.c | 2634 ++ submodule.h | 183 + subprojects/.gitignore | 1 + subprojects/curl.wrap | 13 + subprojects/expat.wrap | 13 + subprojects/openssl.wrap | 15 + subprojects/pcre2.wrap | 16 + subprojects/zlib.wrap | 13 + symlinks.c | 352 + symlinks.h | 28 + t/.gitattributes | 25 + t/.gitignore | 6 + t/Git-SVN/00compile.t | 14 + t/Git-SVN/Utils/add_path_to_url.t | 27 + t/Git-SVN/Utils/can_compress.t | 11 + t/Git-SVN/Utils/canonicalize_url.t | 26 + t/Git-SVN/Utils/collapse_dotdot.t | 23 + t/Git-SVN/Utils/fatal.t | 34 + t/Git-SVN/Utils/join_paths.t | 32 + t/Makefile | 179 + t/README | 1287 + t/aggregate-results.sh | 63 + t/annotate-tests.sh | 677 + t/chainlint-cat.pl | 29 + t/chainlint.pl | 883 + t/chainlint/arithmetic-expansion.expect | 9 + t/chainlint/arithmetic-expansion.test | 13 + t/chainlint/bash-array.expect | 10 + t/chainlint/bash-array.test | 14 + t/chainlint/blank-line-before-esac.expect | 18 + t/chainlint/blank-line-before-esac.test | 21 + t/chainlint/blank-line.expect | 8 + t/chainlint/blank-line.test | 12 + t/chainlint/block-comment.expect | 8 + t/chainlint/block-comment.test | 10 + t/chainlint/block.expect | 23 + t/chainlint/block.test | 29 + t/chainlint/broken-chain.expect | 6 + t/chainlint/broken-chain.test | 10 + t/chainlint/case-comment.expect | 11 + t/chainlint/case-comment.test | 13 + t/chainlint/case.expect | 19 + t/chainlint/case.test | 25 + t/chainlint/chain-break-background.expect | 9 + t/chainlint/chain-break-background.test | 12 + t/chainlint/chain-break-continue.expect | 12 + t/chainlint/chain-break-continue.test | 15 + t/chainlint/chain-break-false.expect | 9 + t/chainlint/chain-break-false.test | 12 + t/chainlint/chain-break-return-exit.expect | 19 + t/chainlint/chain-break-return-exit.test | 25 + t/chainlint/chain-break-status.expect | 9 + t/chainlint/chain-break-status.test | 13 + t/chainlint/chained-block.expect | 9 + t/chainlint/chained-block.test | 13 + t/chainlint/chained-subshell.expect | 10 + t/chainlint/chained-subshell.test | 15 + .../close-nested-and-parent-together.expect | 3 + .../close-nested-and-parent-together.test | 5 + t/chainlint/close-subshell.expect | 26 + t/chainlint/close-subshell.test | 29 + .../command-substitution-subsubshell.expect | 2 + .../command-substitution-subsubshell.test | 5 + t/chainlint/command-substitution.expect | 9 + t/chainlint/command-substitution.test | 13 + t/chainlint/comment.expect | 8 + t/chainlint/comment.test | 13 + t/chainlint/complex-if-in-cuddled-loop.expect | 9 + t/chainlint/complex-if-in-cuddled-loop.test | 13 + t/chainlint/cuddled-if-then-else.expect | 6 + t/chainlint/cuddled-if-then-else.test | 9 + t/chainlint/cuddled-loop.expect | 4 + t/chainlint/cuddled-loop.test | 9 + t/chainlint/cuddled.expect | 17 + t/chainlint/cuddled.test | 24 + t/chainlint/double-here-doc.expect | 12 + t/chainlint/double-here-doc.test | 14 + t/chainlint/dqstring-line-splice.expect | 5 + t/chainlint/dqstring-line-splice.test | 9 + t/chainlint/dqstring-no-interpolate.expect | 12 + t/chainlint/dqstring-no-interpolate.test | 17 + t/chainlint/empty-here-doc.expect | 4 + t/chainlint/empty-here-doc.test | 7 + t/chainlint/exclamation.expect | 4 + t/chainlint/exclamation.test | 10 + t/chainlint/exit-loop.expect | 24 + t/chainlint/exit-loop.test | 29 + t/chainlint/exit-subshell.expect | 5 + t/chainlint/exit-subshell.test | 8 + t/chainlint/for-loop-abbreviated.expect | 5 + t/chainlint/for-loop-abbreviated.test | 8 + t/chainlint/for-loop.expect | 14 + t/chainlint/for-loop.test | 21 + t/chainlint/function.expect | 11 + t/chainlint/function.test | 15 + t/chainlint/here-doc-body-indent.expect | 2 + t/chainlint/here-doc-body-indent.test | 4 + t/chainlint/here-doc-body-pathological.expect | 7 + t/chainlint/here-doc-body-pathological.test | 9 + t/chainlint/here-doc-body.expect | 7 + t/chainlint/here-doc-body.test | 9 + t/chainlint/here-doc-close-subshell.expect | 4 + t/chainlint/here-doc-close-subshell.test | 7 + t/chainlint/here-doc-double.expect | 2 + t/chainlint/here-doc-double.test | 10 + t/chainlint/here-doc-indent-operator.expect | 11 + t/chainlint/here-doc-indent-operator.test | 15 + .../here-doc-multi-line-command-subst.expect | 8 + .../here-doc-multi-line-command-subst.test | 11 + t/chainlint/here-doc-multi-line-string.expect | 7 + t/chainlint/here-doc-multi-line-string.test | 10 + t/chainlint/here-doc.expect | 25 + t/chainlint/here-doc.test | 32 + t/chainlint/if-condition-split.expect | 7 + t/chainlint/if-condition-split.test | 10 + t/chainlint/if-in-loop.expect | 12 + t/chainlint/if-in-loop.test | 17 + t/chainlint/if-then-else.expect | 22 + t/chainlint/if-then-else.test | 31 + t/chainlint/incomplete-line.expect | 10 + t/chainlint/incomplete-line.test | 14 + t/chainlint/inline-comment.expect | 8 + t/chainlint/inline-comment.test | 14 + t/chainlint/loop-detect-failure.expect | 15 + t/chainlint/loop-detect-failure.test | 19 + t/chainlint/loop-detect-status.expect | 18 + t/chainlint/loop-detect-status.test | 21 + t/chainlint/loop-in-if.expect | 12 + t/chainlint/loop-in-if.test | 17 + t/chainlint/loop-upstream-pipe.expect | 10 + t/chainlint/loop-upstream-pipe.test | 13 + ...ti-line-nested-command-substitution.expect | 18 + ...ulti-line-nested-command-substitution.test | 20 + t/chainlint/multi-line-string.expect | 14 + t/chainlint/multi-line-string.test | 17 + t/chainlint/negated-one-liner.expect | 5 + t/chainlint/negated-one-liner.test | 9 + t/chainlint/nested-cuddled-subshell.expect | 25 + t/chainlint/nested-cuddled-subshell.test | 33 + t/chainlint/nested-here-doc.expect | 30 + t/chainlint/nested-here-doc.test | 35 + t/chainlint/nested-loop-detect-failure.expect | 31 + t/chainlint/nested-loop-detect-failure.test | 37 + t/chainlint/nested-subshell-comment.expect | 11 + t/chainlint/nested-subshell-comment.test | 15 + t/chainlint/nested-subshell.expect | 13 + t/chainlint/nested-subshell.test | 15 + t/chainlint/not-heredoc.expect | 14 + t/chainlint/not-heredoc.test | 18 + t/chainlint/one-liner-for-loop.expect | 9 + t/chainlint/one-liner-for-loop.test | 12 + t/chainlint/one-liner.expect | 9 + t/chainlint/one-liner.test | 14 + t/chainlint/p4-filespec.expect | 4 + t/chainlint/p4-filespec.test | 7 + t/chainlint/pipe.expect | 10 + t/chainlint/pipe.test | 14 + t/chainlint/return-loop.expect | 5 + t/chainlint/return-loop.test | 8 + t/chainlint/semicolon.expect | 19 + t/chainlint/semicolon.test | 27 + t/chainlint/sqstring-in-sqstring.expect | 4 + t/chainlint/sqstring-in-sqstring.test | 7 + t/chainlint/subshell-here-doc.expect | 30 + t/chainlint/subshell-here-doc.test | 37 + t/chainlint/subshell-one-liner.expect | 19 + t/chainlint/subshell-one-liner.test | 26 + t/chainlint/t7900-subtree.expect | 22 + t/chainlint/t7900-subtree.test | 24 + t/chainlint/token-pasting.expect | 27 + t/chainlint/token-pasting.test | 34 + t/chainlint/unclosed-here-doc-indent.expect | 4 + t/chainlint/unclosed-here-doc-indent.test | 6 + t/chainlint/unclosed-here-doc.expect | 7 + t/chainlint/unclosed-here-doc.test | 9 + t/chainlint/while-loop.expect | 14 + t/chainlint/while-loop.test | 21 + t/check-non-portable-shell.pl | 58 + t/helper/.gitignore | 2 + t/helper/meson.build | 92 + t/helper/test-advise.c | 24 + t/helper/test-bitmap.c | 55 + t/helper/test-bloom.c | 104 + t/helper/test-bundle-uri.c | 133 + t/helper/test-cache-tree.c | 71 + t/helper/test-chmtime.c | 163 + t/helper/test-config.c | 241 + t/helper/test-crontab.c | 35 + t/helper/test-csprng.c | 28 + t/helper/test-date.c | 135 + t/helper/test-delete-gpgsig.c | 62 + t/helper/test-delta.c | 85 + t/helper/test-dir-iterator.c | 63 + t/helper/test-drop-caches.c | 164 + t/helper/test-dump-cache-tree.c | 79 + t/helper/test-dump-fsmonitor.c | 25 + t/helper/test-dump-split-index.c | 43 + t/helper/test-dump-untracked-cache.c | 74 + t/helper/test-env-helper.c | 100 + t/helper/test-example-tap.c | 131 + t/helper/test-fake-ssh.c | 32 + t/helper/test-find-pack.c | 52 + t/helper/test-fsmonitor-client.c | 226 + t/helper/test-genrandom.c | 34 + t/helper/test-genzeros.c | 37 + t/helper/test-getcwd.c | 26 + t/helper/test-hash-speed.c | 60 + t/helper/test-hash.c | 59 + t/helper/test-hashmap.c | 179 + t/helper/test-hexdump.c | 30 + t/helper/test-json-writer.c | 594 + t/helper/test-lazy-init-name-hash.c | 268 + t/helper/test-match-trees.c | 33 + t/helper/test-mergesort.c | 408 + t/helper/test-mktemp.c | 15 + t/helper/test-online-cpus.c | 9 + t/helper/test-pack-mtimes.c | 59 + t/helper/test-parse-options.c | 342 + t/helper/test-parse-pathspec-file.c | 33 + t/helper/test-partial-clone.c | 46 + t/helper/test-path-utils.c | 510 + t/helper/test-path-walk.c | 112 + t/helper/test-pcre2-config.c | 11 + t/helper/test-pkt-line.c | 188 + t/helper/test-proc-receive.c | 207 + t/helper/test-progress.c | 101 + t/helper/test-reach.c | 191 + t/helper/test-read-cache.c | 41 + t/helper/test-read-graph.c | 102 + t/helper/test-read-midx.c | 158 + t/helper/test-ref-store.c | 352 + t/helper/test-reftable.c | 200 + t/helper/test-regex.c | 117 + t/helper/test-repository.c | 102 + t/helper/test-revision-walking.c | 74 + t/helper/test-rot13-filter.c | 383 + t/helper/test-run-command.c | 480 + t/helper/test-scrap-cache-tree.c | 24 + t/helper/test-serve-v2.c | 39 + t/helper/test-sha1.c | 15 + t/helper/test-sha1.sh | 83 + t/helper/test-sha256.c | 7 + t/helper/test-sigchain.c | 23 + t/helper/test-simple-ipc.c | 687 + t/helper/test-string-list.c | 131 + t/helper/test-submodule-config.c | 71 + t/helper/test-submodule-nested-repo-config.c | 34 + t/helper/test-submodule.c | 244 + t/helper/test-subprocess.c | 20 + t/helper/test-tool-utils.h | 9 + t/helper/test-tool.c | 135 + t/helper/test-tool.h | 87 + t/helper/test-trace2.c | 557 + t/helper/test-truncate.c | 25 + t/helper/test-userdiff.c | 50 + t/helper/test-wildmatch.c | 24 + t/helper/test-windows-named-pipe.c | 72 + t/helper/test-write-cache.c | 25 + t/helper/test-xml-encode.c | 80 + t/interop/.gitignore | 4 + t/interop/Makefile | 19 + t/interop/README | 92 + t/interop/i0000-basic.sh | 27 + t/interop/i5500-git-daemon.sh | 41 + t/interop/i5700-protocol-transition.sh | 68 + t/interop/interop-lib.sh | 94 + t/lib-bash.sh | 19 + t/lib-bitmap.sh | 449 + t/lib-bundle-uri-protocol.sh | 216 + t/lib-bundle.sh | 42 + t/lib-chunk.sh | 18 + t/lib-chunk/corrupt-chunk-file.pl | 90 + t/lib-commit-graph.sh | 74 + t/lib-credential.sh | 685 + t/lib-cvs.sh | 78 + t/lib-diff-alternative.sh | 227 + t/lib-diff-data.sh | 22 + t/lib-diff.sh | 41 + t/lib-encoding.sh | 25 + t/lib-gettext.sh | 63 + t/lib-git-daemon.sh | 120 + t/lib-git-p4.sh | 225 + t/lib-git-svn.sh | 145 + t/lib-gitweb.sh | 128 + t/lib-gpg.sh | 200 + t/lib-gpg/gpgsm-gen-key.in | 8 + t/lib-gpg/gpgsm_cert.p12 | Bin 0 -> 2652 bytes t/lib-gpg/keyring.gpg | 192 + t/lib-gpg/ownertrust | 4 + t/lib-httpd.sh | 370 + t/lib-httpd/apache.conf | 292 + t/lib-httpd/apply-one-time-perl.sh | 27 + t/lib-httpd/broken-smart-http.sh | 10 + t/lib-httpd/error-no-report.sh | 6 + t/lib-httpd/error-smart-http.sh | 3 + t/lib-httpd/error.sh | 31 + .../incomplete-body-upload-pack-v2-http.sh | 3 + .../incomplete-length-upload-pack-v2-http.sh | 3 + t/lib-httpd/nph-custom-auth.sh | 48 + t/lib-httpd/passwd | 1 + t/lib-httpd/proxy-passwd | 1 + t/lib-httpd/ssl.cnf | 8 + t/lib-log-graph.sh | 28 + t/lib-merge.sh | 13 + t/lib-midx.sh | 36 + t/lib-pack.sh | 140 + t/lib-pager.sh | 15 + t/lib-parallel-checkout.sh | 49 + t/lib-patch-mode.sh | 55 + t/lib-perl.sh | 19 + t/lib-proto-disable.sh | 220 + t/lib-read-tree-m-3way.sh | 158 + t/lib-read-tree.sh | 41 + t/lib-rebase.sh | 231 + t/lib-submodule-update.sh | 1099 + t/lib-subtest.sh | 95 + t/lib-sudo.sh | 15 + t/lib-t3100.sh | 10 + t/lib-t6000.sh | 136 + t/lib-terminal.sh | 36 + t/lib-unicode-nfc-nfd.sh | 162 + t/lib-unique-files.sh | 34 + t/meson.build | 1151 + t/oid-info/README | 19 + t/oid-info/hash-info | 29 + t/oid-info/oid | 31 + t/perf/.gitignore | 4 + t/perf/Makefile | 21 + t/perf/README | 210 + t/perf/aggregate.perl | 357 + t/perf/bisect_regression | 73 + t/perf/bisect_run_script | 53 + t/perf/config | 2 + t/perf/lib-bitmap.sh | 100 + t/perf/lib-pack.sh | 25 + t/perf/min_time.perl | 21 + t/perf/p0000-perf-lib-sanity.sh | 57 + t/perf/p0001-rev-list.sh | 48 + t/perf/p0002-read-cache.sh | 14 + t/perf/p0003-delta-base-cache.sh | 31 + t/perf/p0004-lazy-init-name-hash.sh | 56 + t/perf/p0005-status.sh | 49 + t/perf/p0006-read-tree-checkout.sh | 75 + t/perf/p0007-write-cache.sh | 29 + t/perf/p0008-odb-fsync.sh | 82 + t/perf/p0071-sort.sh | 52 + t/perf/p0090-cache-tree.sh | 36 + t/perf/p0100-globbing.sh | 43 + t/perf/p1006-cat-file.sh | 12 + t/perf/p1400-update-ref.sh | 33 + t/perf/p1450-fsck.sh | 13 + t/perf/p1451-fsck-skip-list.sh | 40 + t/perf/p1500-graph-walks.sh | 81 + t/perf/p2000-sparse-operations.sh | 139 + t/perf/p3400-rebase.sh | 56 + t/perf/p3404-rebase-interactive.sh | 36 + t/perf/p4000-diff-algorithms.sh | 29 + t/perf/p4001-diff-no-index.sh | 22 + t/perf/p4002-diff-color-moved.sh | 57 + t/perf/p4205-log-pretty-formats.sh | 16 + t/perf/p4209-pickaxe.sh | 70 + t/perf/p4211-line-log.sh | 42 + t/perf/p4220-log-grep-engines.sh | 54 + t/perf/p4221-log-grep-engines-fixed.sh | 45 + t/perf/p5302-pack-index.sh | 50 + t/perf/p5303-many-packs.sh | 144 + t/perf/p5304-prune.sh | 35 + t/perf/p5310-pack-bitmaps.sh | 40 + t/perf/p5311-pack-bitmaps-fetch.sh | 54 + t/perf/p5312-pack-bitmaps-revs.sh | 34 + t/perf/p5326-multi-pack-bitmaps.sh | 67 + t/perf/p5332-multi-pack-reuse.sh | 81 + t/perf/p5333-pseudo-merge-bitmaps.sh | 32 + t/perf/p5550-fetch-tags.sh | 78 + t/perf/p5551-fetch-rescan.sh | 55 + t/perf/p5600-partial-clone.sh | 42 + t/perf/p5601-clone-reference.sh | 27 + t/perf/p6100-describe.sh | 30 + t/perf/p6300-for-each-ref.sh | 87 + t/perf/p7000-filter-branch.sh | 24 + t/perf/p7102-reset.sh | 21 + t/perf/p7300-clean.sh | 35 + t/perf/p7519-fsmonitor.sh | 314 + t/perf/p7527-builtin-fsmonitor.sh | 257 + t/perf/p7810-grep.sh | 23 + t/perf/p7820-grep-engines.sh | 90 + t/perf/p7821-grep-engines-fixed.sh | 74 + t/perf/p7822-grep-perl-character.sh | 42 + t/perf/p9210-scalar.sh | 39 + t/perf/p9300-fast-import-export.sh | 23 + t/perf/perf-lib.sh | 334 + t/perf/repos/.gitignore | 1 + t/perf/repos/inflate-repo.sh | 85 + t/perf/repos/many-files.sh | 110 + t/perf/run | 258 + t/run-test.sh | 18 + t/socks4-proxy.pl | 48 + t/t0000-basic.sh | 1250 + t/t0001-init.sh | 898 + t/t0002-gitfile.sh | 138 + t/t0003-attributes.sh | 667 + t/t0004-unwritable.sh | 83 + t/t0005-signals.sh | 54 + t/t0006-date.sh | 216 + t/t0007-git-var.sh | 279 + t/t0008-ignores.sh | 955 + t/t0010-racy-git.sh | 32 + t/t0012-help.sh | 265 + t/t0013-sha1dc.sh | 22 + t/t0013/shattered-1.pdf | Bin 0 -> 422435 bytes t/t0014-alias.sh | 58 + t/t0017-env-helper.sh | 106 + t/t0018-advice.sh | 101 + t/t0019-json-writer.sh | 332 + t/t0019/parse_json.perl | 55 + t/t0020-crlf.sh | 400 + t/t0021-conversion.sh | 1154 + t/t0022-crlf-rename.sh | 33 + t/t0023-crlf-am.sh | 44 + t/t0024-crlf-archive.sh | 43 + t/t0025-crlf-renormalize.sh | 39 + t/t0026-eol-config.sh | 103 + t/t0027-auto-crlf.sh | 631 + t/t0028-working-tree-encoding.sh | 310 + t/t0029-core-unsetenvvars.sh | 29 + t/t0030-stripspace.sh | 469 + t/t0033-safe-directory.sh | 299 + t/t0034-root-safe-directory.sh | 93 + t/t0035-safe-bare-repository.sh | 106 + t/t0040-parse-options.sh | 786 + t/t0041-usage.sh | 110 + t/t0050-filesystem.sh | 158 + t/t0051-windows-named-pipe.sh | 22 + t/t0052-simple-ipc.sh | 122 + t/t0055-beyond-symlinks.sh | 35 + t/t0056-git-C.sh | 94 + t/t0060-path-utils.sh | 612 + t/t0061-run-command.sh | 271 + t/t0062-revision-walking.sh | 33 + t/t0063-string-list.sh | 142 + t/t0066-dir-iterator.sh | 133 + t/t0067-parse_pathspec_file.sh | 108 + t/t0068-for-each-repo.sh | 77 + t/t0070-fundamental.sh | 109 + t/t0071-sort.sh | 11 + t/t0080-unit-test-output.sh | 92 + t/t0081-find-pack.sh | 81 + t/t0090-cache-tree.sh | 281 + t/t0091-bugreport.sh | 156 + t/t0092-diagnose.sh | 71 + t/t0095-bloom.sh | 126 + t/t0100-previous.sh | 75 + t/t0101-at-syntax.sh | 46 + t/t0200-gettext-basic.sh | 108 + t/t0200/test.c | 23 + t/t0200/test.perl | 14 + t/t0200/test.sh | 14 + t/t0201-gettext-fallbacks.sh | 67 + t/t0202-gettext-perl.sh | 17 + t/t0202/test.pl | 122 + t/t0203-gettext-setlocale-sanity.sh | 26 + t/t0204-gettext-reencode-sanity.sh | 87 + t/t0210-trace2-normal.sh | 312 + t/t0210/scrub_normal.perl | 54 + t/t0211-trace2-perf.sh | 522 + t/t0211/scrub_perf.perl | 91 + t/t0212-trace2-event.sh | 365 + t/t0212/parse_events.perl | 261 + t/t0300-credentials.sh | 1046 + t/t0301-credential-cache.sh | 139 + t/t0302-credential-store.sh | 213 + t/t0303-credential-external.sh | 84 + t/t0410-partial-clone.sh | 782 + t/t0411-clone-from-partial.sh | 75 + t/t0450-txt-doc-vs-help.sh | 170 + t/t0450/txt-help-mismatches | 57 + t/t0500-progress-display.sh | 377 + t/t0600-reffiles-backend.sh | 502 + t/t0601-reffiles-pack-refs.sh | 448 + t/t0602-reffiles-fsck.sh | 599 + t/t0610-reftable-basics.sh | 1136 + t/t0611-reftable-httpd.sh | 26 + t/t0612-reftable-jgit-compatibility.sh | 132 + t/t0613-reftable-write-options.sh | 286 + t/t1000-read-tree-m-3way.sh | 512 + t/t1001-read-tree-m-2way.sh | 419 + t/t1002-read-tree-m-u-2way.sh | 347 + t/t1003-read-tree-prefix.sh | 37 + t/t1004-read-tree-m-u-wf.sh | 242 + t/t1005-read-tree-reset.sh | 111 + t/t1006-cat-file.sh | 1356 + t/t1007-hash-object.sh | 268 + t/t1008-read-tree-overlay.sh | 35 + t/t1009-read-tree-new-index.sh | 28 + t/t1010-mktree.sh | 69 + t/t1011-read-tree-sparse-checkout.sh | 306 + t/t1012-read-tree-df.sh | 103 + t/t1013-read-tree-submodule.sh | 18 + t/t1014-read-tree-confusing.sh | 64 + t/t1015-read-index-unmerged.sh | 124 + t/t1016-compatObjectFormat.sh | 278 + t/t1016/gpg | 2 + t/t1020-subdirectory.sh | 195 + t/t1021-rerere-in-workdir.sh | 58 + t/t1022-read-tree-partial-clone.sh | 29 + t/t1050-large.sh | 215 + t/t1051-large-conversion.sh | 113 + t/t1060-object-corruption.sh | 148 + t/t1090-sparse-checkout-scope.sh | 109 + t/t1091-sparse-checkout-builtin.sh | 1054 + t/t1092-sparse-checkout-compatibility.sh | 2400 ++ t/t1100-commit-tree-options.sh | 63 + t/t1300-config.sh | 2854 ++ t/t1301-shared-repo.sh | 213 + t/t1302-repo-version.sh | 124 + t/t1303-wacky-config.sh | 135 + t/t1304-default-acl.sh | 65 + t/t1305-config-include.sh | 399 + t/t1306-xdg-files.sh | 195 + t/t1307-config-blob.sh | 79 + t/t1308-config-set.sh | 399 + t/t1309-early-config.sh | 102 + t/t1310-config-default.sh | 36 + t/t1350-config-hooks-path.sh | 51 + t/t1400-update-ref.sh | 2080 ++ t/t1401-symbolic-ref.sh | 225 + t/t1402-check-ref-format.sh | 218 + t/t1403-show-ref.sh | 296 + t/t1404-update-ref-errors.sh | 395 + t/t1405-main-ref-store.sh | 125 + t/t1406-submodule-ref-store.sh | 98 + t/t1407-worktree-ref-store.sh | 55 + t/t1408-packed-refs.sh | 45 + t/t1409-avoid-packing-refs.sh | 124 + t/t1410-reflog.sh | 554 + t/t1411-reflog-show.sh | 172 + t/t1412-reflog-loop.sh | 32 + t/t1413-reflog-detach.sh | 72 + t/t1414-reflog-walk.sh | 138 + t/t1415-worktree-refs.sh | 104 + t/t1416-ref-transaction-hooks.sh | 211 + t/t1417-reflog-updateref.sh | 68 + t/t1418-reflog-exists.sh | 37 + t/t1419-exclude-refs.sh | 158 + t/t1420-lost-found.sh | 36 + t/t1430-bad-ref-name.sh | 392 + t/t1450-fsck.sh | 1063 + t/t1451-fsck-buffer.sh | 141 + t/t1460-refs-migrate.sh | 288 + t/t1500-rev-parse.sh | 327 + t/t1501-work-tree.sh | 447 + t/t1502-rev-parse-parseopt.sh | 337 + t/t1502/.gitattributes | 1 + t/t1502/optionspec-neg | 8 + t/t1502/optionspec-neg.help | 12 + t/t1502/optionspec.help | 36 + t/t1503-rev-parse-verify.sh | 159 + t/t1504-ceiling-dirs.sh | 186 + t/t1505-rev-parse-last.sh | 64 + t/t1506-rev-parse-diagnosis.sh | 285 + t/t1507-rev-parse-upstream.sh | 280 + t/t1508-at-combinations.sh | 118 + t/t1509-root-work-tree.sh | 264 + t/t1509/excludes | 14 + t/t1509/prepare-chroot.sh | 58 + t/t1510-repo-setup.sh | 805 + t/t1511-rev-parse-caret.sh | 134 + t/t1512-rev-parse-disambiguation.sh | 479 + t/t1513-rev-parse-prefix.sh | 99 + t/t1514-rev-parse-push.sh | 76 + t/t1515-rev-parse-outside-repo.sh | 46 + t/t1517-outside-repo.sh | 110 + t/t1600-index.sh | 136 + t/t1601-index-bogus.sh | 23 + t/t1700-split-index.sh | 547 + t/t1701-racy-split-index.sh | 214 + t/t1800-hook.sh | 187 + t/t2000-conflict-when-checking-files-out.sh | 135 + t/t2002-checkout-cache-u.sh | 33 + t/t2003-checkout-cache-mkdir.sh | 119 + t/t2004-checkout-cache-temp.sh | 249 + t/t2005-checkout-index-symlinks.sh | 30 + t/t2006-checkout-index-basic.sh | 103 + t/t2007-checkout-symlink.sh | 55 + t/t2008-checkout-subdir.sh | 82 + t/t2009-checkout-statinfo.sh | 55 + t/t2010-checkout-ambiguous.sh | 68 + t/t2011-checkout-invalid-head.sh | 61 + t/t2012-checkout-last.sh | 169 + t/t2013-checkout-submodule.sh | 75 + t/t2014-checkout-switch.sh | 29 + t/t2015-checkout-unborn.sh | 64 + t/t2016-checkout-patch.sh | 133 + t/t2017-checkout-orphan.sh | 137 + t/t2018-checkout-branch.sh | 288 + t/t2019-checkout-ambiguous-ref.sh | 60 + t/t2020-checkout-detach.sh | 350 + t/t2021-checkout-overwrite.sh | 82 + t/t2022-checkout-paths.sh | 95 + t/t2023-checkout-m.sh | 76 + t/t2024-checkout-dwim.sh | 350 + t/t2025-checkout-no-overlay.sh | 59 + t/t2026-checkout-pathspec-file.sh | 163 + t/t2027-checkout-track.sh | 50 + t/t2030-unresolve-info.sh | 305 + t/t2050-git-dir-relative.sh | 55 + t/t2060-switch.sh | 180 + t/t2070-restore.sh | 223 + t/t2071-restore-patch.sh | 122 + t/t2072-restore-pathspec-file.sh | 177 + t/t2080-parallel-checkout-basics.sh | 277 + t/t2081-parallel-checkout-collisions.sh | 162 + t/t2082-parallel-checkout-attributes.sh | 191 + t/t2100-update-cache-badpath.sh | 61 + t/t2101-update-index-reupdate.sh | 91 + t/t2102-update-index-symlinks.sh | 31 + t/t2103-update-index-ignore-missing.sh | 89 + t/t2104-update-index-skip-worktree.sh | 66 + t/t2105-update-index-gitfile.sh | 38 + t/t2106-update-index-assume-unchanged.sh | 27 + t/t2107-update-index-basic.sh | 145 + t/t2108-update-index-refresh-racy.sh | 63 + t/t2200-add-update.sh | 220 + t/t2201-add-update-typechange.sh | 148 + t/t2202-add-addremove.sh | 54 + t/t2203-add-intent.sh | 314 + t/t2204-add-ignored.sh | 92 + t/t2205-add-worktree-config.sh | 265 + t/t2300-cd-to-toplevel.sh | 46 + t/t2400-worktree-add.sh | 1255 + t/t2401-worktree-prune.sh | 142 + t/t2402-worktree-list.sh | 310 + t/t2403-worktree-move.sh | 274 + t/t2404-worktree-config.sh | 81 + t/t2405-worktree-submodule.sh | 94 + t/t2406-worktree-repair.sh | 257 + t/t2407-worktree-heads.sh | 179 + t/t2500-untracked-overwriting.sh | 244 + t/t2501-cwd-empty.sh | 277 + t/t3000-ls-files-others.sh | 232 + t/t3001-ls-files-others-exclude.sh | 306 + t/t3002-ls-files-dashpath.sh | 76 + t/t3003-ls-files-exclude.sh | 41 + t/t3004-ls-files-basic.sh | 54 + t/t3005-ls-files-relative.sh | 62 + t/t3006-ls-files-long.sh | 40 + t/t3007-ls-files-recurse-submodules.sh | 348 + t/t3008-ls-files-lazy-init-name-hash.sh | 27 + t/t3009-ls-files-others-nonsubmodule.sh | 50 + t/t3010-ls-files-killed-modified.sh | 127 + ...common-prefixes-and-directory-traversal.sh | 209 + t/t3012-ls-files-dedup.sh | 66 + t/t3013-ls-files-format.sh | 145 + t/t3020-ls-files-error-unmatch.sh | 29 + t/t3040-subprojects-basic.sh | 83 + t/t3050-subprojects-fetch.sh | 52 + t/t3060-ls-files-with-tree.sh | 105 + t/t3070-wildmatch.sh | 444 + t/t3100-ls-tree-restrict.sh | 166 + t/t3101-ls-tree-dirname.sh | 241 + t/t3102-ls-tree-wildcards.sh | 36 + t/t3103-ls-tree-misc.sh | 40 + t/t3104-ls-tree-format.sh | 79 + t/t3105-ls-tree-output.sh | 191 + t/t3200-branch.sh | 1705 + t/t3201-branch-contains.sh | 267 + t/t3202-show-branch.sh | 286 + t/t3203-branch-output.sh | 488 + t/t3204-branch-name-interpretation.sh | 170 + t/t3205-branch-color.sh | 44 + t/t3206-range-diff.sh | 927 + t/t3206/history.export | 709 + t/t3207-branch-submodule.sh | 329 + t/t3211-peel-ref.sh | 76 + t/t3300-funny-names.sh | 217 + t/t3301-notes.sh | 1632 + t/t3302-notes-index-expensive.sh | 138 + t/t3303-notes-subtrees.sh | 198 + t/t3304-notes-mixed.sh | 209 + t/t3305-notes-fanout.sh | 140 + t/t3306-notes-prune.sh | 138 + t/t3307-notes-man.sh | 38 + t/t3308-notes-merge.sh | 394 + t/t3309-notes-merge-auto-resolve.sh | 791 + t/t3310-notes-merge-manual-resolve.sh | 617 + t/t3311-notes-merge-fanout.sh | 446 + t/t3320-notes-merge-worktrees.sh | 77 + t/t3321-notes-stripspace.sh | 577 + t/t3400-rebase.sh | 477 + t/t3401-rebase-and-am-rename.sh | 213 + t/t3402-rebase-merge.sh | 224 + t/t3403-rebase-skip.sh | 202 + t/t3404-rebase-interactive.sh | 2291 ++ t/t3405-rebase-malformed.sh | 93 + t/t3406-rebase-message.sh | 258 + t/t3407-rebase-abort.sh | 131 + t/t3408-rebase-multi-line.sh | 58 + t/t3409-rebase-environ.sh | 23 + t/t3412-rebase-root.sh | 241 + t/t3413-rebase-hook.sh | 141 + t/t3415-rebase-autosquash.sh | 487 + t/t3416-rebase-onto-threedots.sh | 228 + t/t3417-rebase-whitespace-fix.sh | 124 + t/t3418-rebase-continue.sh | 357 + t/t3419-rebase-patch-id.sh | 117 + t/t3420-rebase-autostash.sh | 386 + t/t3421-rebase-topology-linear.sh | 360 + t/t3422-rebase-incompatible-options.sh | 133 + t/t3423-rebase-reword.sh | 48 + t/t3424-rebase-empty.sh | 219 + t/t3425-rebase-topology-merges.sh | 110 + t/t3426-rebase-submodule.sh | 64 + t/t3427-rebase-subtree.sh | 93 + t/t3428-rebase-signoff.sh | 140 + t/t3429-rebase-edit-todo.sh | 90 + t/t3430-rebase-merges.sh | 613 + t/t3431-rebase-fork-point.sh | 115 + t/t3432-rebase-fast-forward.sh | 141 + t/t3433-rebase-across-mode-change.sh | 48 + t/t3434-rebase-i18n.sh | 93 + t/t3434/ISO8859-1.txt | 3 + t/t3434/eucJP.txt | 4 + t/t3435-rebase-gpg-sign.sh | 123 + t/t3436-rebase-more-options.sh | 209 + t/t3437-rebase-fixup-options.sh | 237 + t/t3437/expected-combined-message | 21 + t/t3437/expected-squash-message | 51 + t/t3438-rebase-broken-files.sh | 69 + t/t3500-cherry.sh | 81 + t/t3501-revert-cherry-pick.sh | 259 + t/t3502-cherry-pick-merge.sh | 135 + t/t3503-cherry-pick-root.sh | 81 + t/t3504-cherry-pick-rerere.sh | 106 + t/t3505-cherry-pick-empty.sh | 151 + t/t3506-cherry-pick-ff.sh | 123 + t/t3507-cherry-pick-conflict.sh | 590 + t/t3508-cherry-pick-many-commits.sh | 199 + t/t3509-cherry-pick-merge-df.sh | 104 + t/t3510-cherry-pick-sequence.sh | 724 + t/t3511-cherry-pick-x.sh | 321 + t/t3512-cherry-pick-submodule.sh | 56 + t/t3513-revert-submodule.sh | 39 + t/t3514-cherry-pick-revert-gpg.sh | 86 + t/t3600-rm.sh | 908 + t/t3601-rm-pathspec-file.sh | 79 + t/t3602-rm-sparse-checkout.sh | 139 + t/t3650-replay-basics.sh | 198 + t/t3700-add.sh | 551 + t/t3701-add-interactive.sh | 1233 + t/t3702-add-edit.sh | 128 + t/t3703-add-magic-pathspec.sh | 58 + t/t3704-add-pathspec-file.sh | 159 + t/t3705-add-sparse-checkout.sh | 236 + t/t3800-mktag.sh | 586 + t/t3900-i18n-commit.sh | 246 + t/t3900/1-UTF-8.txt | 3 + t/t3900/2-UTF-8.txt | 4 + t/t3900/ISO-2022-JP.txt | 4 + t/t3900/ISO8859-1.txt | 3 + t/t3900/UTF-16.txt | Bin 0 -> 146 bytes t/t3900/eucJP.txt | 4 + t/t3901-i18n-patch.sh | 325 + t/t3901/8859-1.txt | 4 + t/t3901/utf8.txt | 4 + t/t3902-quoted.sh | 152 + t/t3903-stash.sh | 1595 + t/t3904-stash-patch.sh | 110 + t/t3905-stash-include-untracked.sh | 431 + t/t3906-stash-submodule.sh | 69 + t/t3907-stash-show-config.sh | 83 + t/t3908-stash-in-worktree.sh | 27 + t/t3909-stash-pathspec-file.sh | 100 + t/t3910-mac-os-precompose.sh | 260 + t/t3920-crlf-messages.sh | 127 + t/t4000-diff-format.sh | 125 + t/t4001-diff-rename.sh | 312 + t/t4002-diff-basic.sh | 413 + t/t4003-diff-rename-1.sh | 129 + t/t4004-diff-rename-symlink.sh | 70 + t/t4005-diff-rename-2.sh | 78 + t/t4006-diff-mode.sh | 67 + t/t4007-rename-3.sh | 91 + t/t4008-diff-break-rewrite.sh | 160 + t/t4009-diff-rename-4.sh | 99 + t/t4010-diff-pathspec.sh | 153 + t/t4011-diff-symlink.sh | 176 + t/t4012-diff-binary.sh | 133 + t/t4013-diff-various.sh | 707 + ...nfig_format.subjectprefix_DIFFERENT_PREFIX | 2 + ...ee_--cc_--patch-with-stat_--summary_master | 34 + ...tree_--cc_--patch-with-stat_--summary_side | 39 + ...ff.diff-tree_--cc_--patch-with-stat_master | 34 + .../diff.diff-tree_--cc_--shortstat_master | 4 + ...iff.diff-tree_--cc_--stat_--summary_master | 6 + .../diff.diff-tree_--cc_--stat_--summary_side | 8 + t/t4013/diff.diff-tree_--cc_--stat_master | 6 + t/t4013/diff.diff-tree_--cc_--summary_REVERSE | 6 + t/t4013/diff.diff-tree_--cc_master | 30 + t/t4013/diff.diff-tree_--format=%N_note | 6 + .../diff.diff-tree_--patch-with-raw_initial | 2 + .../diff.diff-tree_--patch-with-stat_initial | 2 + ..._--pretty=oneline_--patch-with-raw_initial | 2 + ...--pretty=oneline_--patch-with-stat_initial | 2 + ...ty=oneline_--root_--patch-with-raw_initial | 33 + ...y=oneline_--root_--patch-with-stat_initial | 34 + ...ff-tree_--pretty=oneline_--root_-p_initial | 29 + ....diff-tree_--pretty=oneline_--root_initial | 6 + ...diff.diff-tree_--pretty=oneline_-p_initial | 2 + .../diff.diff-tree_--pretty=oneline_initial | 2 + t/t4013/diff.diff-tree_--pretty_--notes_note | 12 + ...iff-tree_--pretty_--patch-with-raw_initial | 2 + ...ff-tree_--pretty_--patch-with-stat_initial | 2 + ....diff-tree_--pretty_--patch-with-stat_side | 43 + ...e_--pretty_--root_--patch-with-raw_initial | 38 + ..._--pretty_--root_--patch-with-stat_initial | 39 + ...ty_--root_--stat_--compact-summary_initial | 12 + ...e_--pretty_--root_--stat_--summary_initial | 15 + ...f.diff-tree_--pretty_--root_--stat_initial | 12 + ...-tree_--pretty_--root_--summary_-r_initial | 11 + ...iff-tree_--pretty_--root_--summary_initial | 11 + .../diff.diff-tree_--pretty_--root_-p_initial | 34 + .../diff.diff-tree_--pretty_--root_initial | 11 + ...iff-tree_--pretty_--stat_--summary_initial | 2 + .../diff.diff-tree_--pretty_--stat_initial | 2 + .../diff.diff-tree_--pretty_--summary_initial | 2 + ...-R_--root_--stat_--compact-summary_initial | 12 + t/t4013/diff.diff-tree_--pretty_-p_initial | 2 + t/t4013/diff.diff-tree_--pretty_-p_side | 38 + t/t4013/diff.diff-tree_--pretty_initial | 2 + t/t4013/diff.diff-tree_--pretty_note | 9 + t/t4013/diff.diff-tree_--pretty_side | 11 + .../diff.diff-tree_--root_--abbrev_initial | 6 + ....diff-tree_--root_--patch-with-raw_initial | 33 + ...diff-tree_--root_--patch-with-stat_initial | 34 + ...ff.diff-tree_--root_-p_--abbrev=10_initial | 29 + ...--root_-p_--full-index_--abbrev=10_initial | 29 + ...f.diff-tree_--root_-p_--full-index_initial | 29 + t/t4013/diff.diff-tree_--root_-p_initial | 29 + ...iff.diff-tree_--root_-r_--abbrev=4_initial | 6 + .../diff.diff-tree_--root_-r_--abbrev_initial | 6 + t/t4013/diff.diff-tree_--root_-r_initial | 6 + t/t4013/diff.diff-tree_--root_initial | 6 + ...tree_--stat_--compact-summary_initial_mode | 4 + t/t4013/diff.diff-tree_--stat_initial_mode | 4 + t/t4013/diff.diff-tree_--summary_initial_mode | 3 + ...e_-R_--stat_--compact-summary_initial_mode | 4 + t/t4013/diff.diff-tree_-c_--abbrev_master | 5 + .../diff.diff-tree_-c_--stat_--summary_master | 6 + .../diff.diff-tree_-c_--stat_--summary_side | 8 + t/t4013/diff.diff-tree_-c_--stat_master | 6 + t/t4013/diff.diff-tree_-c_master | 5 + t/t4013/diff.diff-tree_-m_master | 11 + t/t4013/diff.diff-tree_-p_-m_master | 80 + t/t4013/diff.diff-tree_-p_initial | 2 + t/t4013/diff.diff-tree_-p_master | 2 + t/t4013/diff.diff-tree_-r_--abbrev=4_initial | 2 + t/t4013/diff.diff-tree_-r_--abbrev_initial | 2 + t/t4013/diff.diff-tree_-r_initial | 2 + t/t4013/diff.diff-tree_initial | 2 + t/t4013/diff.diff-tree_initial_mode | 3 + t/t4013/diff.diff-tree_master | 2 + t/t4013/diff.diff_--abbrev_initial..side | 32 + t/t4013/diff.diff_--cached | 38 + t/t4013/diff.diff_--cached_--_file0 | 15 + ...f.diff_--dirstat-by-file_initial_rearrange | 3 + .../diff.diff_--dirstat_--cc_master~1_master | 3 + t/t4013/diff.diff_--dirstat_initial_rearrange | 3 + t/t4013/diff.diff_--dirstat_master~1_master~2 | 3 + ...diff_--line-prefix=abc_master_master^_side | 29 + .../diff.diff_--line-prefix_--cached_--_file0 | 15 + t/t4013/diff.diff_--name-status_dir2_dir | 2 + ....diff_--no-index_--name-status_--_dir2_dir | 3 + ...iff.diff_--no-index_--name-status_dir2_dir | 3 + ....diff_--no-index_--raw_--abbrev=4_dir2_dir | 3 + ...diff_--no-index_--raw_--no-abbrev_dir2_dir | 3 + t/t4013/diff.diff_--no-index_--raw_dir2_dir | 3 + t/t4013/diff.diff_--no-index_dir_dir3 | 2 + ...iff.diff_--patch-with-raw_-r_initial..side | 36 + .../diff.diff_--patch-with-raw_initial..side | 36 + ...ff.diff_--patch-with-stat_-r_initial..side | 37 + .../diff.diff_--patch-with-stat_initial..side | 37 + t/t4013/diff.diff_--raw_--abbrev=4_initial | 6 + t/t4013/diff.diff_--raw_--no-abbrev_initial | 6 + t/t4013/diff.diff_--raw_initial | 6 + t/t4013/diff.diff_--stat_initial..side | 6 + t/t4013/diff.diff_-U1_initial..side | 29 + t/t4013/diff.diff_-U2_initial..side | 31 + t/t4013/diff.diff_-U_initial..side | 32 + t/t4013/diff.diff_-r_--stat_initial..side | 6 + t/t4013/diff.diff_-r_initial..side | 32 + t/t4013/diff.diff_initial..side | 32 + t/t4013/diff.diff_master_master^_side | 29 + ...tach_--stdout_--suffix=.diff_initial..side | 61 + ...at-patch_--attach_--stdout_initial..master | 170 + ...t-patch_--attach_--stdout_initial..master^ | 110 + ...rmat-patch_--attach_--stdout_initial..side | 61 + ..._--stdout_--numbered-files_initial..master | 170 + ..._--subject-prefix=TESTCASE_initial..master | 170 + ...at-patch_--inline_--stdout_initial..master | 170 + ...t-patch_--inline_--stdout_initial..master^ | 110 + ...-patch_--inline_--stdout_initial..master^^ | 62 + ...rmat-patch_--inline_--stdout_initial..side | 61 + ...-stdout_--cover-letter_-n_initial..master^ | 103 + ...tch_--stdout_--no-numbered_initial..master | 127 + ...-patch_--stdout_--numbered_initial..master | 127 + ...diff.format-patch_--stdout_initial..master | 127 + ...iff.format-patch_--stdout_initial..master^ | 81 + .../diff.format-patch_--stdout_initial..side | 47 + t/t4013/diff.log_--cc_-m_-p_master | 200 + t/t4013/diff.log_--decorate=full_--all | 61 + ..._--decorate=full_--clear-decorations_--all | 61 + ...f.log_--decorate=full_--decorate-all_--all | 61 + t/t4013/diff.log_--decorate_--all | 61 + ...f.log_--decorate_--clear-decorations_--all | 61 + .../diff.log_--decorate_--decorate-all_--all | 61 + ...diff.log_--diff-merges=first-parent_master | 56 + ...--diff-merges=off_-p_--first-parent_master | 78 + ...--first-parent_--diff-merges=off_-p_master | 78 + ..._--no-diff-merges_-p_--first-parent_master | 78 + ...--patch-with-stat_--summary_master_--_dir_ | 74 + t/t4013/diff.log_--patch-with-stat_master | 129 + .../diff.log_--patch-with-stat_master_--_dir_ | 74 + ...ot_--cc_--patch-with-stat_--summary_master | 199 + ..._--root_--patch-with-stat_--summary_master | 167 + .../diff.log_--root_--patch-with-stat_master | 161 + ...root_-c_--patch-with-stat_--summary_master | 199 + t/t4013/diff.log_--root_-p_master | 142 + t/t4013/diff.log_--root_master | 34 + t/t4013/diff.log_-GF_-p_--pickaxe-all_master | 27 + t/t4013/diff.log_-GF_-p_master | 18 + t/t4013/diff.log_-GF_master | 7 + t/t4013/diff.log_-IA_-IB_-I1_-I2_-p_master | 99 + t/t4013/diff.log_-SF_-p_master | 18 + t/t4013/diff.log_-SF_master | 7 + t/t4013/diff.log_-SF_master_--max-count=0 | 2 + t/t4013/diff.log_-SF_master_--max-count=1 | 7 + t/t4013/diff.log_-SF_master_--max-count=2 | 7 + t/t4013/diff.log_-S_F_master | 7 + t/t4013/diff.log_-c_-m_-p_master | 200 + t/t4013/diff.log_-m_--raw_master | 61 + t/t4013/diff.log_-m_--stat_master | 66 + t/t4013/diff.log_-m_-p_--first-parent_master | 100 + t/t4013/diff.log_-m_-p_master | 200 + ...f.log_-p_--diff-merges=first-parent_master | 137 + t/t4013/diff.log_-p_--first-parent_master | 100 + t/t4013/diff.log_-p_master | 115 + t/t4013/diff.log_master | 34 + ...ellipses-diff-tree_--root_--abbrev_initial | 6 + ...ses-diff-tree_--root_-r_--abbrev=4_initial | 6 + ...ipses-diff-tree_--root_-r_--abbrev_initial | 6 + ...ff.noellipses-diff-tree_-c_--abbrev_master | 5 + ...-diff_--no-index_--raw_--abbrev=4_dir2_dir | 3 + ....noellipses-diff_--no-index_--raw_dir2_dir | 3 + ...ses-diff_--patch-with-raw_-r_initial..side | 36 + ...lipses-diff_--patch-with-raw_initial..side | 36 + ...f.noellipses-diff_--raw_--abbrev=4_initial | 6 + t/t4013/diff.noellipses-diff_--raw_initial | 6 + ...diff.noellipses-show_--patch-with-raw_side | 42 + .../diff.noellipses-whatchanged_--root_master | 42 + .../diff.noellipses-whatchanged_-SF_master | 9 + t/t4013/diff.noellipses-whatchanged_master | 32 + t/t4013/diff.rev-list_--children_HEAD | 7 + t/t4013/diff.rev-list_--parents_HEAD | 7 + t/t4013/diff.show_--first-parent_master | 30 + t/t4013/diff.show_--patch-with-raw_side | 42 + ...diff.show_--patch-with-stat_--summary_side | 44 + t/t4013/diff.show_--patch-with-stat_side | 43 + t/t4013/diff.show_--root_initial | 34 + t/t4013/diff.show_--stat_--summary_side | 13 + t/t4013/diff.show_--stat_side | 12 + t/t4013/diff.show_-c_master | 36 + t/t4013/diff.show_-m_master | 93 + t/t4013/diff.show_initial | 7 + t/t4013/diff.show_master | 36 + t/t4013/diff.show_side | 38 + ...--patch-with-stat_--summary_master_--_dir_ | 61 + .../diff.whatchanged_--patch-with-stat_master | 116 + ...atchanged_--patch-with-stat_master_--_dir_ | 61 + ...ot_--cc_--patch-with-stat_--summary_master | 199 + ..._--root_--patch-with-stat_--summary_master | 160 + ...hatchanged_--root_--patch-with-stat_master | 154 + ...root_-c_--patch-with-stat_--summary_master | 199 + t/t4013/diff.whatchanged_--root_-p_master | 135 + t/t4013/diff.whatchanged_--root_master | 42 + t/t4013/diff.whatchanged_-SF_-p_master | 18 + t/t4013/diff.whatchanged_-SF_master | 9 + t/t4013/diff.whatchanged_-p_master | 102 + t/t4013/diff.whatchanged_master | 32 + t/t4014-format-patch.sh | 2550 ++ t/t4015-diff-whitespace.sh | 2388 ++ t/t4016-diff-quote.sh | 88 + t/t4017-diff-retval.sh | 190 + t/t4018-diff-funcname.sh | 122 + t/t4018/README | 15 + t/t4018/bash-arithmetic-function | 4 + t/t4018/bash-bashism-style-compact | 6 + t/t4018/bash-bashism-style-function | 4 + t/t4018/bash-bashism-style-whitespace | 4 + t/t4018/bash-conditional-function | 4 + t/t4018/bash-missing-parentheses | 6 + t/t4018/bash-mixed-style-compact | 4 + t/t4018/bash-mixed-style-function | 4 + t/t4018/bash-nested-functions | 6 + t/t4018/bash-other-characters | 4 + t/t4018/bash-posix-style-compact | 4 + t/t4018/bash-posix-style-function | 4 + t/t4018/bash-posix-style-whitespace | 4 + t/t4018/bash-subshell-function | 4 + t/t4018/bash-trailing-comment | 4 + t/t4018/cpp-c++-function | 4 + t/t4018/cpp-class-constructor | 4 + t/t4018/cpp-class-constructor-mem-init | 5 + t/t4018/cpp-class-definition | 4 + t/t4018/cpp-class-definition-derived | 5 + t/t4018/cpp-class-destructor | 4 + t/t4018/cpp-function-returning-global-type | 4 + t/t4018/cpp-function-returning-nested | 5 + t/t4018/cpp-function-returning-pointer | 4 + t/t4018/cpp-function-returning-reference | 4 + t/t4018/cpp-gnu-style-function | 5 + t/t4018/cpp-namespace-definition | 4 + t/t4018/cpp-operator-definition | 4 + t/t4018/cpp-skip-access-specifiers | 8 + t/t4018/cpp-skip-comment-block | 9 + t/t4018/cpp-skip-labels | 8 + t/t4018/cpp-struct-definition | 9 + t/t4018/cpp-struct-single-line | 7 + t/t4018/cpp-template-function-definition | 4 + t/t4018/cpp-union-definition | 4 + t/t4018/cpp-void-c-function | 4 + t/t4018/csharp-exclude-assignments | 20 + t/t4018/csharp-exclude-control-statements | 34 + t/t4018/csharp-exclude-exceptions | 29 + t/t4018/csharp-exclude-generic-method-calls | 12 + t/t4018/csharp-exclude-init-dispose | 22 + t/t4018/csharp-exclude-iterations | 26 + t/t4018/csharp-exclude-method-calls | 20 + t/t4018/csharp-exclude-other | 18 + t/t4018/csharp-method | 10 + t/t4018/csharp-method-array | 10 + t/t4018/csharp-method-explicit | 12 + t/t4018/csharp-method-generics | 11 + .../csharp-method-generics-alternate-spaces | 11 + t/t4018/csharp-method-modifiers | 13 + t/t4018/csharp-method-multiline | 10 + t/t4018/csharp-method-params | 10 + t/t4018/csharp-method-special-chars | 11 + t/t4018/csharp-method-with-spacing | 10 + t/t4018/csharp-property | 11 + t/t4018/csharp-property-braces-same-line | 10 + t/t4018/css-attribute-value-selector | 4 + t/t4018/css-block-level-@-statements | 10 + t/t4018/css-brace-in-col-1 | 5 + t/t4018/css-class-selector | 4 + t/t4018/css-colon-eol | 4 + t/t4018/css-colon-selector | 5 + t/t4018/css-common | 4 + t/t4018/css-id-selector | 4 + t/t4018/css-long-selector-list | 6 + t/t4018/css-prop-sans-indent | 5 + t/t4018/css-root-selector | 4 + t/t4018/css-short-selector-list | 4 + t/t4018/css-trailing-space | 5 + t/t4018/custom1-pattern | 17 + t/t4018/custom2-match-to-end-of-line | 8 + t/t4018/custom3-alternation-in-pattern | 17 + t/t4018/dts-labels | 9 + t/t4018/dts-node-unitless | 8 + t/t4018/dts-nodes | 8 + t/t4018/dts-nodes-boolean-prop | 9 + t/t4018/dts-nodes-comment1 | 8 + t/t4018/dts-nodes-comment2 | 8 + t/t4018/dts-nodes-multiline-prop | 13 + t/t4018/dts-reference | 9 + t/t4018/dts-root | 5 + t/t4018/dts-root-comment | 8 + t/t4018/elixir-do-not-pick-end | 5 + t/t4018/elixir-ex-unit-test | 6 + t/t4018/elixir-function | 5 + t/t4018/elixir-macro | 5 + t/t4018/elixir-module | 9 + t/t4018/elixir-module-func | 8 + t/t4018/elixir-nested-module | 9 + t/t4018/elixir-private-function | 5 + t/t4018/elixir-protocol | 6 + t/t4018/elixir-protocol-implementation | 5 + t/t4018/fortran-block-data | 5 + t/t4018/fortran-comment | 13 + t/t4018/fortran-comment-keyword | 14 + t/t4018/fortran-comment-legacy | 13 + t/t4018/fortran-comment-legacy-star | 13 + t/t4018/fortran-external-function | 9 + t/t4018/fortran-external-subroutine | 5 + t/t4018/fortran-module | 5 + t/t4018/fortran-module-procedure | 13 + t/t4018/fortran-program | 5 + t/t4018/fountain-scene | 4 + t/t4018/golang-complex-function | 8 + t/t4018/golang-func | 4 + t/t4018/golang-interface | 4 + t/t4018/golang-long-func | 5 + t/t4018/golang-struct | 4 + t/t4018/java-class-brace-on-separate-line | 6 + t/t4018/java-class-member-function | 12 + .../java-class-space-before-type-parameters | 6 + t/t4018/java-class-type-parameters | 6 + t/t4018/java-class-type-parameters-implements | 6 + t/t4018/java-enum-constant | 6 + t/t4018/java-interface-type-parameters | 6 + .../java-interface-type-parameters-extends | 6 + t/t4018/java-method-return-generic-bounded | 9 + t/t4018/java-method-return-generic-wildcard | 9 + t/t4018/java-nested-field | 6 + t/t4018/java-non-sealed | 8 + t/t4018/java-record | 6 + t/t4018/java-record-space-before-components | 6 + t/t4018/java-record-type-parameters | 6 + t/t4018/java-sealed | 7 + t/t4018/java-sealed-permits | 6 + t/t4018/java-sealed-type-parameters | 6 + ...-sealed-type-parameters-implements-permits | 6 + t/t4018/java-sealed-type-parameters-permits | 6 + t/t4018/kotlin-class | 5 + t/t4018/kotlin-enum-class | 5 + t/t4018/kotlin-fun | 5 + t/t4018/kotlin-inheritace-class | 5 + t/t4018/kotlin-inline-class | 5 + t/t4018/kotlin-interface | 5 + t/t4018/kotlin-nested-fun | 9 + t/t4018/kotlin-public-class | 5 + t/t4018/kotlin-sealed-class | 5 + t/t4018/markdown-heading-indented | 6 + t/t4018/markdown-heading-non-headings | 17 + t/t4018/matlab-class-definition | 5 + t/t4018/matlab-function | 4 + t/t4018/matlab-octave-section-1 | 3 + t/t4018/matlab-octave-section-2 | 3 + t/t4018/matlab-section | 3 + t/t4018/perl-skip-end-of-heredoc | 8 + t/t4018/perl-skip-forward-decl | 10 + t/t4018/perl-skip-sub-in-pod | 18 + t/t4018/perl-sub-definition | 4 + t/t4018/perl-sub-definition-kr-brace | 4 + t/t4018/php-abstract-class | 4 + t/t4018/php-abstract-method | 7 + t/t4018/php-class | 4 + t/t4018/php-enum | 4 + t/t4018/php-final-class | 4 + t/t4018/php-final-method | 7 + t/t4018/php-function | 4 + t/t4018/php-interface | 4 + t/t4018/php-method | 7 + t/t4018/php-trait | 7 + t/t4018/python-async-def | 4 + t/t4018/python-class | 4 + t/t4018/python-def | 4 + t/t4018/python-indented-async-def | 7 + t/t4018/python-indented-class | 5 + t/t4018/python-indented-def | 7 + t/t4018/rust-fn | 5 + t/t4018/rust-impl | 5 + t/t4018/rust-macro-rules | 6 + t/t4018/rust-struct | 5 + t/t4018/rust-trait | 5 + t/t4018/scheme-class | 7 + t/t4018/scheme-def | 4 + t/t4018/scheme-def-variant | 4 + t/t4018/scheme-define-slash-public | 7 + t/t4018/scheme-define-syntax | 8 + t/t4018/scheme-define-variant | 4 + t/t4018/scheme-library | 11 + t/t4018/scheme-local-define | 4 + t/t4018/scheme-module | 6 + t/t4018/scheme-top-level-define | 4 + t/t4018/scheme-user-defined-define | 6 + t/t4019-diff-wserror.sh | 297 + t/t4020-diff-external.sh | 339 + t/t4020/diff.NUL | Bin 0 -> 116 bytes t/t4021-format-patch-numbered.sh | 141 + t/t4022-diff-rewrite.sh | 101 + t/t4023-diff-rename-typechange.sh | 88 + t/t4024-diff-optimize-common.sh | 157 + t/t4025-hunk-header.sh | 38 + t/t4026-color.sh | 178 + t/t4027-diff-submodule.sh | 291 + t/t4028-format-patch-mime-headers.sh | 31 + t/t4029-diff-trailing-space.sh | 43 + t/t4030-diff-textconv.sh | 174 + t/t4031-diff-rewrite-binary.sh | 80 + t/t4032-diff-inter-hunk-context.sh | 117 + t/t4033-diff-patience.sh | 20 + t/t4034-diff-words.sh | 415 + t/t4034/ada/expect | 27 + t/t4034/ada/post | 13 + t/t4034/ada/pre | 13 + t/t4034/bibtex/expect | 15 + t/t4034/bibtex/post | 10 + t/t4034/bibtex/pre | 9 + t/t4034/cpp/expect | 35 + t/t4034/cpp/post | 30 + t/t4034/cpp/pre | 30 + t/t4034/csharp/expect | 35 + t/t4034/csharp/post | 18 + t/t4034/csharp/pre | 18 + t/t4034/css/expect | 16 + t/t4034/css/post | 10 + t/t4034/css/pre | 10 + t/t4034/dts/expect | 37 + t/t4034/dts/post | 32 + t/t4034/dts/pre | 32 + t/t4034/fortran/expect | 10 + t/t4034/fortran/post | 5 + t/t4034/fortran/pre | 5 + t/t4034/html/expect | 8 + t/t4034/html/post | 3 + t/t4034/html/pre | 3 + t/t4034/java/expect | 36 + t/t4034/java/post | 19 + t/t4034/java/pre | 19 + t/t4034/kotlin/expect | 43 + t/t4034/kotlin/post | 30 + t/t4034/kotlin/pre | 30 + t/t4034/matlab/expect | 14 + t/t4034/matlab/post | 9 + t/t4034/matlab/pre | 9 + t/t4034/objc/expect | 35 + t/t4034/objc/post | 18 + t/t4034/objc/pre | 18 + t/t4034/pascal/expect | 35 + t/t4034/pascal/post | 18 + t/t4034/pascal/pre | 18 + t/t4034/perl/expect | 13 + t/t4034/perl/post | 22 + t/t4034/perl/pre | 22 + t/t4034/php/expect | 35 + t/t4034/php/post | 18 + t/t4034/php/pre | 18 + t/t4034/python/expect | 34 + t/t4034/python/post | 17 + t/t4034/python/pre | 17 + t/t4034/ruby/expect | 34 + t/t4034/ruby/post | 17 + t/t4034/ruby/pre | 17 + t/t4034/scheme/expect | 11 + t/t4034/scheme/post | 6 + t/t4034/scheme/pre | 6 + t/t4034/tex/expect | 9 + t/t4034/tex/post | 4 + t/t4034/tex/pre | 4 + t/t4035-diff-quiet.sh | 164 + t/t4036-format-patch-signer-mime.sh | 50 + t/t4037-diff-r-t-dirs.sh | 53 + t/t4038-diff-combined.sh | 546 + t/t4039-diff-assume-unchanged.sh | 42 + t/t4040-whitespace-status.sh | 75 + t/t4041-diff-submodule-option.sh | 557 + t/t4042-diff-textconv-caching.sh | 144 + t/t4043-diff-rename-binary.sh | 45 + t/t4044-diff-index-unique-abbrev.sh | 56 + t/t4045-diff-relative.sh | 248 + t/t4046-diff-unmerged.sh | 108 + t/t4047-diff-dirstat.sh | 992 + t/t4048-diff-combined-binary.sh | 221 + t/t4049-diff-stat-count.sh | 69 + t/t4050-diff-histogram.sh | 12 + t/t4051-diff-function-context.sh | 212 + t/t4051/appended1.c | 15 + t/t4051/appended2.c | 35 + t/t4051/dummy.c | 7 + t/t4051/hello.c | 24 + t/t4051/includes.c | 20 + t/t4052-stat-output.sh | 416 + t/t4053-diff-no-index.sh | 298 + t/t4054-diff-bogus-tree.sh | 83 + t/t4055-diff-context.sh | 92 + t/t4056-diff-order.sh | 200 + t/t4057-diff-combined-paths.sh | 109 + t/t4058-diff-duplicates.sh | 191 + t/t4059-diff-submodule-not-initialized.sh | 133 + t/t4060-diff-submodule-option-diff-format.sh | 981 + t/t4061-diff-indent.sh | 371 + t/t4062-diff-pickaxe.sh | 29 + t/t4063-diff-blobs.sh | 97 + t/t4064-diff-oidfind.sh | 124 + t/t4065-diff-anchored.sh | 94 + t/t4066-diff-emit-delay.sh | 82 + t/t4067-diff-partial-clone.sh | 183 + t/t4068-diff-symmetric-merge-base.sh | 203 + t/t4069-remerge-diff.sh | 362 + t/t4100-apply-stat.sh | 41 + t/t4100/t-apply-1.expect | 11 + t/t4100/t-apply-1.patch | 194 + t/t4100/t-apply-2.expect | 5 + t/t4100/t-apply-2.patch | 72 + t/t4100/t-apply-3.expect | 7 + t/t4100/t-apply-3.patch | 567 + t/t4100/t-apply-4.expect | 5 + t/t4100/t-apply-4.patch | 7 + t/t4100/t-apply-5.expect | 19 + t/t4100/t-apply-5.patch | 612 + t/t4100/t-apply-6.expect | 5 + t/t4100/t-apply-6.patch | 101 + t/t4100/t-apply-7.expect | 6 + t/t4100/t-apply-7.patch | 494 + t/t4100/t-apply-8.expect | 2 + t/t4100/t-apply-8.patch | 11 + t/t4100/t-apply-9.expect | 2 + t/t4100/t-apply-9.patch | 11 + t/t4101-apply-nonl.sh | 32 + t/t4101/diff.0-1 | 6 + t/t4101/diff.0-2 | 7 + t/t4101/diff.0-3 | 8 + t/t4101/diff.1-0 | 6 + t/t4101/diff.1-2 | 8 + t/t4101/diff.1-3 | 8 + t/t4101/diff.2-0 | 7 + t/t4101/diff.2-1 | 8 + t/t4101/diff.2-3 | 7 + t/t4101/diff.3-0 | 8 + t/t4101/diff.3-1 | 8 + t/t4101/diff.3-2 | 7 + t/t4102-apply-rename.sh | 58 + t/t4103-apply-binary.sh | 184 + t/t4104-apply-boundary.sh | 113 + t/t4105-apply-fuzz.sh | 52 + t/t4106-apply-stdin.sh | 30 + t/t4107-apply-ignore-whitespace.sh | 194 + t/t4108-apply-threeway.sh | 336 + t/t4109-apply-multifrag.sh | 36 + t/t4109/expect-1 | 31 + t/t4109/expect-2 | 23 + t/t4109/expect-3 | 24 + t/t4109/patch1.patch | 28 + t/t4109/patch2.patch | 30 + t/t4109/patch3.patch | 31 + t/t4109/patch4.patch | 30 + t/t4110-apply-scan.sh | 23 + t/t4110/expect | 20 + t/t4110/patch1.patch | 17 + t/t4110/patch2.patch | 11 + t/t4110/patch3.patch | 14 + t/t4110/patch4.patch | 11 + t/t4110/patch5.patch | 11 + t/t4111-apply-subdir.sh | 156 + t/t4112-apply-renames.sh | 145 + t/t4113-apply-ending.sh | 53 + t/t4114-apply-typechange.sh | 129 + t/t4115-apply-symlink.sh | 143 + t/t4116-apply-reverse.sh | 92 + t/t4117-apply-reject.sh | 107 + t/t4118-apply-empty-context.sh | 52 + t/t4119-apply-config.sh | 180 + t/t4120-apply-popt.sh | 89 + t/t4121-apply-diffs.sh | 35 + t/t4122-apply-symlink-inside.sh | 157 + t/t4123-apply-shrink.sh | 46 + t/t4124-apply-ws-rule.sh | 559 + t/t4125-apply-ws-fuzz.sh | 100 + t/t4126-apply-empty.sh | 92 + t/t4127-apply-same-fn.sh | 97 + t/t4128-apply-root.sh | 122 + t/t4129-apply-samemode.sh | 194 + t/t4130-apply-criss-cross-rename.sh | 71 + t/t4131-apply-fake-ancestor.sh | 42 + t/t4132-apply-removal.sh | 97 + t/t4133-apply-filenames.sh | 63 + t/t4134-apply-submodule.sh | 39 + t/t4135-apply-weird-filenames.sh | 101 + t/t4135/.gitignore | 3 + t/t4135/add-plain.diff | 5 + t/t4135/add-with backslash.diff | 5 + t/t4135/add-with quote.diff | 5 + t/t4135/add-with spaces.diff | 5 + t/t4135/add-with tab.diff | 5 + t/t4135/damaged-tz.diff | 5 + t/t4135/damaged.diff | 5 + t/t4135/diff-plain.diff | 5 + t/t4135/diff-with backslash.diff | 5 + t/t4135/diff-with quote.diff | 5 + t/t4135/diff-with spaces.diff | 5 + t/t4135/diff-with tab.diff | 5 + t/t4135/funny-tz.diff | 5 + t/t4135/git-plain.diff | 7 + t/t4135/git-with backslash.diff | 7 + t/t4135/git-with quote.diff | 7 + t/t4135/git-with spaces.diff | 7 + t/t4135/git-with tab.diff | 7 + t/t4135/make-patches | 45 + t/t4136-apply-check.sh | 63 + t/t4137-apply-submodule.sh | 24 + t/t4138-apply-ws-expansion.sh | 121 + t/t4139-apply-escape.sh | 142 + t/t4140-apply-ita.sh | 56 + t/t4141-apply-too-large.sh | 22 + t/t4150-am.sh | 1282 + t/t4151-am-abort.sh | 227 + t/t4152-am-subjects.sh | 78 + t/t4153-am-resume-override-opts.sh | 106 + t/t4200-rerere.sh | 737 + t/t4201-shortlog.sh | 437 + t/t4202-log.sh | 2393 ++ t/t4203-mailmap.sh | 1124 + t/t4204-patch-id.sh | 347 + t/t4205-log-pretty-formats.sh | 1224 + t/t4206-log-follow-harder-copies.sh | 57 + t/t4207-log-decoration-colors.sh | 134 + t/t4208-log-magic-pathspec.sh | 145 + t/t4209-log-pickaxe.sh | 227 + t/t4210-log-i18n.sh | 141 + t/t4211-line-log.sh | 368 + t/t4211/history.export | 406 + t/t4211/sha1/expect.beginning-of-file | 43 + t/t4211/sha1/expect.end-of-file | 62 + t/t4211/sha1/expect.move-support-f | 80 + t/t4211/sha1/expect.multiple | 104 + t/t4211/sha1/expect.multiple-overlapping | 187 + t/t4211/sha1/expect.multiple-superset | 187 + t/t4211/sha1/expect.parallel-change-f-to-main | 160 + t/t4211/sha1/expect.simple-f | 59 + t/t4211/sha1/expect.simple-f-to-main | 100 + t/t4211/sha1/expect.simple-main | 68 + t/t4211/sha1/expect.simple-main-to-end | 70 + t/t4211/sha1/expect.two-ranges | 102 + t/t4211/sha1/expect.vanishes-early | 39 + t/t4211/sha256/expect.beginning-of-file | 43 + t/t4211/sha256/expect.end-of-file | 62 + t/t4211/sha256/expect.move-support-f | 80 + t/t4211/sha256/expect.multiple | 104 + t/t4211/sha256/expect.multiple-overlapping | 187 + t/t4211/sha256/expect.multiple-superset | 187 + .../sha256/expect.parallel-change-f-to-main | 160 + t/t4211/sha256/expect.simple-f | 59 + t/t4211/sha256/expect.simple-f-to-main | 100 + t/t4211/sha256/expect.simple-main | 68 + t/t4211/sha256/expect.simple-main-to-end | 70 + t/t4211/sha256/expect.two-ranges | 102 + t/t4211/sha256/expect.vanishes-early | 39 + t/t4212-log-corrupt.sh | 135 + t/t4213-log-tabexpand.sh | 105 + t/t4214-log-graph-octopus.sh | 350 + t/t4215-log-skewed-merges.sh | 373 + t/t4216-log-bloom.sh | 776 + t/t4217-log-limit.sh | 41 + t/t4252-am-options.sh | 79 + t/t4252/am-test-1-1 | 19 + t/t4252/am-test-1-2 | 21 + t/t4252/am-test-2-1 | 19 + t/t4252/am-test-2-2 | 21 + t/t4252/am-test-3-1 | 19 + t/t4252/am-test-3-2 | 21 + t/t4252/am-test-4-1 | 19 + t/t4252/am-test-4-2 | 22 + t/t4252/am-test-5-1 | 20 + t/t4252/am-test-5-2 | 15 + t/t4252/am-test-6-1 | 21 + t/t4252/file-1-0 | 7 + t/t4252/file-2-0 | 7 + t/t4253-am-keep-cr-dos.sh | 101 + t/t4254-am-corrupt.sh | 89 + t/t4255-am-submodule.sh | 97 + t/t4256-am-format-flowed.sh | 19 + t/t4256/1/mailinfo.c | 1245 + t/t4256/1/mailinfo.c.orig | 1185 + t/t4256/1/patch | 129 + t/t4257-am-interactive.sh | 53 + t/t4258-am-quoted-cr.sh | 37 + t/t4258/mbox | 12 + t/t4300-merge-tree.sh | 381 + t/t4301-merge-tree-write-tree.sh | 993 + t/t5000-tar-tree.sh | 555 + t/t5000/huge-and-future.tar | Bin 0 -> 2048 bytes t/t5000/huge-object | Bin 0 -> 2048 bytes t/t5000/pax.tar | Bin 0 -> 10240 bytes t/t5001-archive-attr.sh | 165 + t/t5002-archive-attr-pattern.sh | 87 + t/t5003-archive-zip.sh | 276 + t/t5003/infozip-symlinks.zip | Bin 0 -> 328 bytes t/t5004-archive-corner-cases.sh | 228 + t/t5004/big-pack.zip | Bin 0 -> 7373 bytes t/t5004/empty-with-pax-header.tar | Bin 0 -> 10240 bytes t/t5004/empty.zip | Bin 0 -> 62 bytes t/t5100-mailinfo.sh | 303 + t/t5100/.gitattributes | 4 + t/t5100/0001mboxrd | 4 + t/t5100/0002mboxrd | 5 + t/t5100/comment.expect | 5 + t/t5100/comment.in | 9 + t/t5100/embed-from.expect | 5 + t/t5100/embed-from.in | 13 + t/t5100/empty | 0 t/t5100/info-from.expect | 5 + t/t5100/info-from.in | 8 + t/t5100/info0001 | 5 + t/t5100/info0002 | 5 + t/t5100/info0003 | 5 + t/t5100/info0004 | 5 + t/t5100/info0005 | 5 + t/t5100/info0006 | 5 + t/t5100/info0007 | 5 + t/t5100/info0008 | 5 + t/t5100/info0009 | 5 + t/t5100/info0010 | 5 + t/t5100/info0011 | 5 + t/t5100/info0012 | 5 + t/t5100/info0012--message-id | 5 + t/t5100/info0013 | 5 + t/t5100/info0014 | 5 + t/t5100/info0014--scissors | 5 + t/t5100/info0015 | 5 + t/t5100/info0015--no-inbody-headers | 5 + t/t5100/info0016 | 5 + t/t5100/info0016--no-inbody-headers | 5 + t/t5100/info0017 | 5 + t/t5100/info0018 | 5 + t/t5100/info0018--no-inbody-headers | 5 + t/t5100/msg0001 | 2 + t/t5100/msg0002 | 21 + t/t5100/msg0003 | 9 + t/t5100/msg0004 | 7 + t/t5100/msg0005 | 13 + t/t5100/msg0006 | 2 + t/t5100/msg0007 | 2 + t/t5100/msg0008 | 4 + t/t5100/msg0009 | 2 + t/t5100/msg0010 | 5 + t/t5100/msg0011 | 2 + t/t5100/msg0012 | 7 + t/t5100/msg0012--message-id | 8 + t/t5100/msg0013 | 0 t/t5100/msg0014 | 18 + t/t5100/msg0014--scissors | 4 + t/t5100/msg0015 | 0 t/t5100/msg0015--no-inbody-headers | 3 + t/t5100/msg0016 | 2 + t/t5100/msg0016--no-inbody-headers | 4 + t/t5100/msg0017 | 2 + t/t5100/msg0018 | 2 + t/t5100/msg0018--no-inbody-headers | 8 + t/t5100/nul-b64.expect | Bin 0 -> 1672 bytes t/t5100/nul-b64.in | 37 + t/t5100/nul-plain | Bin 0 -> 91 bytes t/t5100/patch0001 | 14 + t/t5100/patch0002 | 14 + t/t5100/patch0003 | 14 + t/t5100/patch0004 | 93 + t/t5100/patch0005 | 69 + t/t5100/patch0006 | 14 + t/t5100/patch0007 | 0 t/t5100/patch0008 | 0 t/t5100/patch0009 | 13 + t/t5100/patch0010 | 20 + t/t5100/patch0011 | 22 + t/t5100/patch0012 | 30 + t/t5100/patch0012--message-id | 30 + t/t5100/patch0013 | 0 t/t5100/patch0014 | 64 + t/t5100/patch0014--scissors | 64 + t/t5100/patch0015 | 8 + t/t5100/patch0015--no-inbody-headers | 8 + t/t5100/patch0016 | 8 + t/t5100/patch0016--no-inbody-headers | 8 + t/t5100/patch0017 | 6 + t/t5100/patch0018 | 6 + t/t5100/patch0018--no-inbody-headers | 6 + t/t5100/quoted-cr-info | 5 + t/t5100/quoted-cr-msg | 2 + t/t5100/quoted-cr-patch | 22 + t/t5100/quoted-cr.mbox | 47 + t/t5100/quoted-from.expect | 3 + t/t5100/quoted-from.in | 10 + t/t5100/quoted-string.expect | 5 + t/t5100/quoted-string.in | 9 + t/t5100/rfc2047-info-0001 | 4 + t/t5100/rfc2047-info-0002 | 4 + t/t5100/rfc2047-info-0003 | 4 + t/t5100/rfc2047-info-0004 | 4 + t/t5100/rfc2047-info-0005 | 2 + t/t5100/rfc2047-info-0006 | 2 + t/t5100/rfc2047-info-0007 | 2 + t/t5100/rfc2047-info-0008 | 2 + t/t5100/rfc2047-info-0009 | 2 + t/t5100/rfc2047-info-0010 | 2 + t/t5100/rfc2047-info-0011 | 2 + t/t5100/rfc2047-samples.mbox | 48 + t/t5100/sample.mbox | 720 + t/t5100/sample.mboxrd | 19 + t/t5150-request-pull.sh | 309 + t/t5200-update-server-info.sh | 49 + t/t5300-pack-object.sh | 692 + t/t5301-sliding-window.sh | 61 + t/t5302-pack-index.sh | 296 + t/t5303-pack-corruption-resilience.sh | 409 + t/t5304-prune.sh | 367 + t/t5305-include-tag.sh | 121 + t/t5306-pack-nobase.sh | 77 + t/t5307-pack-missing-commit.sh | 39 + t/t5308-pack-detect-duplicates.sh | 82 + t/t5309-pack-delta-cycles.sh | 78 + t/t5310-pack-bitmaps.sh | 538 + t/t5311-pack-bitmaps-shallow.sh | 57 + t/t5312-prune-corruption.sh | 113 + t/t5313-pack-bounds-checks.sh | 195 + t/t5314-pack-cycle-detection.sh | 114 + t/t5315-pack-objects-compression.sh | 38 + t/t5316-pack-delta-depth.sh | 120 + t/t5317-pack-objects-filter-objects.sh | 481 + t/t5318-commit-graph.sh | 949 + t/t5319-multi-pack-index.sh | 1266 + t/t5319/no-objects.midx | Bin 0 -> 1116 bytes t/t5320-delta-islands.sh | 144 + t/t5321-pack-large-objects.sh | 33 + t/t5322-pack-objects-sparse.sh | 141 + t/t5323-pack-redundant.sh | 498 + t/t5324-split-commit-graph.sh | 744 + t/t5325-reverse-index.sh | 207 + t/t5326-multi-pack-bitmaps.sh | 585 + t/t5327-multi-pack-bitmaps-rev.sh | 43 + t/t5328-commit-graph-64bit-time.sh | 86 + t/t5329-pack-objects-cruft.sh | 948 + t/t5330-no-lazy-fetch-with-commit-graph.sh | 47 + t/t5331-pack-objects-stdin.sh | 239 + t/t5332-multi-pack-reuse.sh | 283 + t/t5333-pseudo-merge-bitmaps.sh | 449 + t/t5334-incremental-multi-pack-index.sh | 47 + t/t5351-unpack-large-objects.sh | 102 + t/t5400-send-pack.sh | 303 + t/t5401-update-hooks.sh | 142 + t/t5402-post-merge-hook.sh | 61 + t/t5403-post-checkout-hook.sh | 115 + t/t5404-tracking-branches.sh | 65 + t/t5405-send-pack-rewind.sh | 45 + t/t5406-remote-rejects.sh | 24 + t/t5407-post-rewrite-hook.sh | 313 + t/t5408-send-pack-stdin.sh | 93 + t/t5409-colorize-remote-messages.sh | 101 + t/t5410-receive-pack-alternates.sh | 44 + t/t5411-proc-receive-hook.sh | 120 + t/t5411/common-functions.sh | 73 + t/t5411/once-0010-report-status-v1.sh | 91 + t/t5411/test-0000-standard-git-push.sh | 134 + .../test-0001-standard-git-push--porcelain.sh | 138 + t/t5411/test-0002-pre-receive-declined.sh | 31 + ...st-0003-pre-receive-declined--porcelain.sh | 32 + t/t5411/test-0010-proc-receive-settings.sh | 7 + t/t5411/test-0011-no-hook-error.sh | 60 + t/t5411/test-0012-no-hook-error--porcelain.sh | 62 + t/t5411/test-0013-bad-protocol.sh | 302 + t/t5411/test-0014-bad-protocol--porcelain.sh | 304 + t/t5411/test-0020-report-ng.sh | 63 + t/t5411/test-0021-report-ng--porcelain.sh | 65 + t/t5411/test-0022-report-unexpect-ref.sh | 43 + ...est-0023-report-unexpect-ref--porcelain.sh | 44 + t/t5411/test-0024-report-unknown-ref.sh | 32 + ...test-0025-report-unknown-ref--porcelain.sh | 33 + t/t5411/test-0026-push-options.sh | 133 + t/t5411/test-0027-push-options--porcelain.sh | 138 + t/t5411/test-0030-report-ok.sh | 33 + t/t5411/test-0031-report-ok--porcelain.sh | 34 + t/t5411/test-0032-report-with-options.sh | 253 + ...est-0033-report-with-options--porcelain.sh | 262 + t/t5411/test-0034-report-ft.sh | 42 + t/t5411/test-0035-report-ft--porcelain.sh | 43 + ...t-0036-report-multi-rewrite-for-one-ref.sh | 221 + ...rt-multi-rewrite-for-one-ref--porcelain.sh | 166 + t/t5411/test-0038-report-mixed-refs.sh | 87 + .../test-0039-report-mixed-refs--porcelain.sh | 89 + t/t5411/test-0040-process-all-refs.sh | 111 + .../test-0041-process-all-refs--porcelain.sh | 112 + ...t-0050-proc-receive-refs-with-modifiers.sh | 129 + t/t5500-fetch-pack.sh | 1092 + t/t5501-fetch-push-alternates.sh | 69 + t/t5502-quickfetch.sh | 145 + t/t5503-tagfollow.sh | 163 + t/t5504-fetch-receive-strict.sh | 382 + t/t5505-remote.sh | 1637 + t/t5506-remote-groups.sh | 110 + t/t5507-remote-environment.sh | 35 + t/t5509-fetch-push-namespaces.sh | 178 + t/t5510-fetch.sh | 1489 + t/t5511-refspec.sh | 96 + t/t5512-ls-remote.sh | 421 + t/t5513-fetch-track.sh | 30 + t/t5514-fetch-multiple.sh | 386 + t/t5515-fetch-merge-logic.sh | 229 + t/t5515/fetch.br-branches-default | 8 + t/t5515/fetch.br-branches-default-merge | 9 + ...br-branches-default-merge_branches-default | 9 + t/t5515/fetch.br-branches-default-octopus | 10 + ...-branches-default-octopus_branches-default | 10 + ...fetch.br-branches-default_branches-default | 8 + t/t5515/fetch.br-branches-one | 8 + t/t5515/fetch.br-branches-one-merge | 9 + .../fetch.br-branches-one-merge_branches-one | 9 + t/t5515/fetch.br-branches-one-octopus | 9 + ...fetch.br-branches-one-octopus_branches-one | 9 + t/t5515/fetch.br-branches-one_branches-one | 8 + t/t5515/fetch.br-config-explicit | 11 + t/t5515/fetch.br-config-explicit-merge | 11 + ...h.br-config-explicit-merge_config-explicit | 11 + t/t5515/fetch.br-config-explicit-octopus | 11 + ...br-config-explicit-octopus_config-explicit | 11 + .../fetch.br-config-explicit_config-explicit | 11 + t/t5515/fetch.br-config-glob | 11 + t/t5515/fetch.br-config-glob-merge | 11 + .../fetch.br-config-glob-merge_config-glob | 11 + t/t5515/fetch.br-config-glob-octopus | 11 + .../fetch.br-config-glob-octopus_config-glob | 11 + t/t5515/fetch.br-config-glob_config-glob | 11 + t/t5515/fetch.br-remote-explicit | 11 + t/t5515/fetch.br-remote-explicit-merge | 11 + ...h.br-remote-explicit-merge_remote-explicit | 11 + t/t5515/fetch.br-remote-explicit-octopus | 11 + ...br-remote-explicit-octopus_remote-explicit | 11 + .../fetch.br-remote-explicit_remote-explicit | 11 + t/t5515/fetch.br-remote-glob | 11 + t/t5515/fetch.br-remote-glob-merge | 11 + .../fetch.br-remote-glob-merge_remote-glob | 11 + t/t5515/fetch.br-remote-glob-octopus | 11 + .../fetch.br-remote-glob-octopus_remote-glob | 11 + t/t5515/fetch.br-remote-glob_remote-glob | 11 + t/t5515/fetch.br-unconfig | 11 + t/t5515/fetch.br-unconfig_--tags_.._.git | 8 + t/t5515/fetch.br-unconfig_.._.git | 2 + t/t5515/fetch.br-unconfig_.._.git_one | 2 + ....._.git_one_tag_tag-one_tag_tag-three-file | 8 + t/t5515/fetch.br-unconfig_.._.git_one_two | 3 + ...._.git_tag_tag-one-tree_tag_tag-three-file | 7 + ...unconfig_.._.git_tag_tag-one_tag_tag-three | 7 + t/t5515/fetch.br-unconfig_branches-default | 8 + t/t5515/fetch.br-unconfig_branches-one | 8 + t/t5515/fetch.br-unconfig_config-explicit | 11 + t/t5515/fetch.br-unconfig_config-glob | 11 + t/t5515/fetch.br-unconfig_remote-explicit | 11 + t/t5515/fetch.br-unconfig_remote-glob | 11 + t/t5515/fetch.main | 11 + t/t5515/fetch.main_--tags_.._.git | 8 + t/t5515/fetch.main_.._.git | 2 + t/t5515/fetch.main_.._.git_one | 2 + ....._.git_one_tag_tag-one_tag_tag-three-file | 8 + t/t5515/fetch.main_.._.git_one_two | 3 + ...._.git_tag_tag-one-tree_tag_tag-three-file | 7 + ...tch.main_.._.git_tag_tag-one_tag_tag-three | 7 + t/t5515/fetch.main_branches-default | 8 + t/t5515/fetch.main_branches-one | 8 + t/t5515/fetch.main_config-explicit | 11 + t/t5515/fetch.main_config-glob | 11 + t/t5515/fetch.main_remote-explicit | 11 + t/t5515/fetch.main_remote-glob | 11 + t/t5515/refs.br-branches-default | 12 + t/t5515/refs.br-branches-default-merge | 12 + ...br-branches-default-merge_branches-default | 12 + t/t5515/refs.br-branches-default-octopus | 12 + ...-branches-default-octopus_branches-default | 12 + .../refs.br-branches-default_branches-default | 12 + t/t5515/refs.br-branches-one | 12 + t/t5515/refs.br-branches-one-merge | 12 + .../refs.br-branches-one-merge_branches-one | 12 + t/t5515/refs.br-branches-one-octopus | 12 + .../refs.br-branches-one-octopus_branches-one | 12 + t/t5515/refs.br-branches-one_branches-one | 12 + t/t5515/refs.br-config-explicit | 15 + t/t5515/refs.br-config-explicit-merge | 15 + ...s.br-config-explicit-merge_config-explicit | 15 + t/t5515/refs.br-config-explicit-octopus | 15 + ...br-config-explicit-octopus_config-explicit | 15 + .../refs.br-config-explicit_config-explicit | 15 + t/t5515/refs.br-config-glob | 15 + t/t5515/refs.br-config-glob-merge | 15 + t/t5515/refs.br-config-glob-merge_config-glob | 15 + t/t5515/refs.br-config-glob-octopus | 15 + .../refs.br-config-glob-octopus_config-glob | 15 + t/t5515/refs.br-config-glob_config-glob | 15 + t/t5515/refs.br-remote-explicit | 15 + t/t5515/refs.br-remote-explicit-merge | 15 + ...s.br-remote-explicit-merge_remote-explicit | 15 + t/t5515/refs.br-remote-explicit-octopus | 15 + ...br-remote-explicit-octopus_remote-explicit | 15 + .../refs.br-remote-explicit_remote-explicit | 15 + t/t5515/refs.br-remote-glob | 15 + t/t5515/refs.br-remote-glob-merge | 15 + t/t5515/refs.br-remote-glob-merge_remote-glob | 15 + t/t5515/refs.br-remote-glob-octopus | 15 + .../refs.br-remote-glob-octopus_remote-glob | 15 + t/t5515/refs.br-remote-glob_remote-glob | 15 + t/t5515/refs.br-unconfig | 11 + t/t5515/refs.br-unconfig_--tags_.._.git | 11 + t/t5515/refs.br-unconfig_.._.git | 5 + t/t5515/refs.br-unconfig_.._.git_one | 5 + ....._.git_one_tag_tag-one_tag_tag-three-file | 11 + t/t5515/refs.br-unconfig_.._.git_one_two | 5 + ...._.git_tag_tag-one-tree_tag_tag-three-file | 11 + ...unconfig_.._.git_tag_tag-one_tag_tag-three | 11 + t/t5515/refs.br-unconfig_branches-default | 12 + t/t5515/refs.br-unconfig_branches-one | 12 + t/t5515/refs.br-unconfig_config-explicit | 15 + t/t5515/refs.br-unconfig_config-glob | 15 + t/t5515/refs.br-unconfig_remote-explicit | 15 + t/t5515/refs.br-unconfig_remote-glob | 15 + t/t5515/refs.main | 11 + t/t5515/refs.main_--tags_.._.git | 11 + t/t5515/refs.main_.._.git | 5 + t/t5515/refs.main_.._.git_one | 5 + ....._.git_one_tag_tag-one_tag_tag-three-file | 11 + t/t5515/refs.main_.._.git_one_two | 5 + ...._.git_tag_tag-one-tree_tag_tag-three-file | 11 + ...efs.main_.._.git_tag_tag-one_tag_tag-three | 11 + t/t5515/refs.main_branches-default | 12 + t/t5515/refs.main_branches-one | 12 + t/t5515/refs.main_config-explicit | 15 + t/t5515/refs.main_config-glob | 15 + t/t5515/refs.main_remote-explicit | 15 + t/t5515/refs.main_remote-glob | 15 + t/t5516-fetch-push.sh | 1912 + t/t5517-push-mirror.sh | 281 + t/t5518-fetch-exit-status.sh | 40 + t/t5519-push-alternates.sh | 146 + t/t5520-pull.sh | 831 + t/t5521-pull-options.sh | 255 + t/t5522-pull-symlink.sh | 86 + t/t5523-push-upstream.sh | 137 + t/t5524-pull-msg.sh | 52 + t/t5525-fetch-tagopt.sh | 54 + t/t5526-fetch-submodules.sh | 1196 + t/t5527-fetch-odd-refs.sh | 66 + t/t5528-push-default.sh | 297 + t/t5529-push-errors.sh | 66 + t/t5530-upload-pack-error.sh | 122 + t/t5531-deep-submodule-push.sh | 640 + t/t5532-fetch-proxy.sh | 52 + t/t5533-push-cas.sh | 399 + t/t5534-push-signed.sh | 392 + t/t5535-fetch-push-symref.sh | 42 + t/t5536-fetch-conflicts.sh | 86 + t/t5537-fetch-shallow.sh | 299 + t/t5538-push-shallow.sh | 126 + t/t5539-fetch-http-shallow.sh | 157 + t/t5540-http-push-webdav.sh | 204 + t/t5541-http-push-smart.sh | 506 + t/t5542-push-http-shallow.sh | 96 + t/t5543-atomic-push.sh | 283 + t/t5544-pack-objects-hook.sh | 78 + t/t5545-push-options.sh | 291 + t/t5546-receive-limits.sh | 85 + t/t5547-push-quarantine.sh | 73 + t/t5548-push-porcelain.sh | 278 + t/t5549-fetch-push-http.sh | 72 + t/t5550-http-fetch-dumb.sh | 533 + t/t5551-http-fetch-smart.sh | 775 + t/t5552-skipping-fetch-negotiator.sh | 226 + t/t5553-set-upstream.sh | 203 + t/t5554-noop-fetch-negotiator.sh | 23 + t/t5555-http-smart-common.sh | 160 + t/t5557-http-get.sh | 38 + t/t5558-clone-bundle-uri.sh | 1255 + t/t5559-http-fetch-smart-http2.sh | 5 + t/t5560-http-backend-noserver.sh | 77 + t/t5561-http-backend.sh | 138 + t/t5562-http-backend-content-length.sh | 174 + t/t5562/invoke-with-content-length.pl | 36 + t/t5563-simple-http-auth.sh | 677 + t/t5564-http-proxy.sh | 96 + t/t556x_common | 110 + t/t5570-git-daemon.sh | 235 + t/t5571-pre-push-hook.sh | 141 + t/t5572-pull-submodule.sh | 268 + t/t5573-pull-verify-signatures.sh | 153 + t/t5574-fetch-output.sh | 304 + t/t5580-unc-paths.sh | 92 + t/t5581-http-curl-verbose.sh | 29 + t/t5582-fetch-negative-refspec.sh | 289 + t/t5583-push-branches.sh | 115 + t/t5600-clone-fail-cleanup.sh | 109 + t/t5601-clone.sh | 945 + t/t5602-clone-remote-exec.sh | 27 + t/t5603-clone-dirname.sh | 109 + t/t5604-clone-reference.sh | 363 + t/t5605-clone-local.sh | 179 + t/t5606-clone-options.sh | 200 + t/t5607-clone-bundle.sh | 214 + t/t5608-clone-2gb.sh | 52 + t/t5609-clone-branch.sh | 73 + t/t5610-clone-detached.sh | 79 + t/t5611-clone-config.sh | 136 + t/t5612-clone-refspec.sh | 238 + t/t5613-info-alternate.sh | 140 + t/t5614-clone-submodules-shallow.sh | 130 + t/t5615-alternate-env.sh | 91 + t/t5616-partial-clone.sh | 909 + t/t5617-clone-submodules-remote.sh | 110 + t/t5618-alternate-refs.sh | 61 + t/t5619-clone-local-ambiguous-transport.sh | 70 + t/t5700-protocol-v1.sh | 344 + t/t5701-git-serve.sh | 404 + t/t5702-protocol-v2.sh | 1483 + t/t5703-upload-pack-ref-in-want.sh | 539 + t/t5704-protocol-violations.sh | 51 + t/t5705-session-id-in-capabilities.sh | 87 + t/t5730-protocol-v2-bundle-uri-file.sh | 17 + t/t5731-protocol-v2-bundle-uri-git.sh | 17 + t/t5732-protocol-v2-bundle-uri-http.sh | 17 + t/t5750-bundle-uri-parse.sh | 289 + t/t5801-remote-helpers.sh | 358 + t/t5801/git-remote-nourl | 3 + t/t5801/git-remote-testgit | 165 + t/t5802-connect-helper.sh | 102 + t/t5810-proto-disable-local.sh | 38 + t/t5811-proto-disable-git.sh | 21 + t/t5812-proto-disable-http.sh | 38 + t/t5813-proto-disable-ssh.sh | 44 + t/t5814-proto-disable-ext.sh | 19 + t/t5815-submodule-protos.sh | 44 + t/t5900-repo-selection.sh | 101 + t/t6000-rev-list-misc.sh | 185 + t/t6001-rev-list-graft.sh | 127 + t/t6002-rev-list-bisect.sh | 316 + t/t6003-rev-list-topo-order.sh | 444 + t/t6004-rev-list-path-optim.sh | 99 + t/t6005-rev-list-count.sh | 65 + t/t6006-rev-list-format.sh | 629 + t/t6007-rev-list-cherry-pick-file.sh | 284 + t/t6008-rev-list-submodule.sh | 45 + t/t6009-rev-list-parent.sh | 163 + t/t6010-merge-base.sh | 308 + t/t6011-rev-list-with-bad-commit.sh | 59 + t/t6012-rev-list-simplify.sh | 288 + t/t6013-rev-list-reverse-parents.sh | 45 + t/t6014-rev-list-all.sh | 42 + t/t6016-rev-list-graph-simplify-history.sh | 246 + t/t6017-rev-list-stdin.sh | 151 + t/t6018-rev-list-glob.sh | 426 + t/t6019-rev-list-ancestry-path.sh | 132 + t/t6020-bundle-misc.sh | 730 + t/t6021-rev-list-exclude-hidden.sh | 163 + t/t6022-rev-list-missing.sh | 148 + t/t6030-bisect-porcelain.sh | 1262 + t/t6040-tracking-info.sh | 295 + t/t6041-bisect-submodule.sh | 37 + t/t6050-replace.sh | 549 + t/t6060-merge-index.sh | 98 + t/t6100-rev-list-in-order.sh | 77 + t/t6101-rev-parse-parents.sh | 230 + t/t6102-rev-list-unexpected-objects.sh | 132 + t/t6110-rev-list-sparse.sh | 23 + t/t6111-rev-list-treesame.sh | 197 + t/t6112-rev-list-filters-objects.sh | 716 + t/t6113-rev-list-bitmap-filters.sh | 159 + t/t6114-keep-packs.sh | 70 + t/t6115-rev-list-du.sh | 81 + t/t6120-describe.sh | 752 + t/t6130-pathspec-noglob.sh | 161 + t/t6131-pathspec-icase.sh | 110 + t/t6132-pathspec-exclude.sh | 428 + t/t6133-pathspec-rev-dwim.sh | 49 + t/t6134-pathspec-in-submodule.sh | 32 + t/t6135-pathspec-with-attrs.sh | 424 + t/t6136-pathspec-in-bare.sh | 38 + t/t6200-fmt-merge-msg.sh | 704 + t/t6300-for-each-ref.sh | 2143 ++ t/t6301-for-each-ref-errors.sh | 69 + t/t6302-for-each-ref-filter.sh | 544 + t/t6400-merge-df.sh | 163 + t/t6401-merge-criss-cross.sh | 68 + t/t6402-merge-rename.sh | 973 + t/t6403-merge-file.sh | 571 + t/t6404-recursive-merge.sh | 152 + t/t6405-merge-symlinks.sh | 65 + t/t6406-merge-attr.sh | 311 + t/t6407-merge-binary.sh | 60 + t/t6408-merge-up-to-date.sh | 92 + t/t6409-merge-subtree.sh | 155 + t/t6411-merge-filemode.sh | 103 + t/t6412-merge-large-rename.sh | 106 + t/t6413-merge-crlf.sh | 47 + t/t6414-merge-rename-nocruft.sh | 100 + t/t6415-merge-dir-to-symlink.sh | 177 + t/t6416-recursive-corner-cases.sh | 1885 + t/t6417-merge-ours-theirs.sh | 108 + t/t6418-merge-text-auto.sh | 233 + t/t6419-merge-ignorecase.sh | 56 + t/t6421-merge-partial-clone.sh | 443 + t/t6422-merge-rename-corner-cases.sh | 1465 + t/t6423-merge-rename-directories.sh | 5835 +++ t/t6424-merge-unrelated-index-changes.sh | 310 + t/t6425-merge-rename-delete.sh | 27 + t/t6426-merge-skip-unneeded-updates.sh | 767 + t/t6427-diff3-conflict-markers.sh | 304 + t/t6428-merge-conflicts-sparse.sh | 145 + t/t6429-merge-sequence-rename-caching.sh | 772 + t/t6430-merge-recursive.sh | 776 + t/t6431-merge-criscross.sh | 95 + t/t6432-merge-recursive-space-options.sh | 210 + t/t6433-merge-toplevel.sh | 177 + t/t6434-merge-recursive-rename-options.sh | 333 + t/t6435-merge-sparse.sh | 60 + t/t6436-merge-overwrite.sh | 207 + t/t6437-submodule-merge.sh | 545 + t/t6438-submodule-directory-file-conflicts.sh | 22 + t/t6439-merge-co-error-msgs.sh | 142 + t/t6500-gc.sh | 440 + t/t6501-freshen-objects.sh | 183 + t/t6600-test-reach.sh | 765 + t/t6601-path-walk.sh | 368 + t/t6700-tree-depth.sh | 94 + t/t7001-mv.sh | 565 + t/t7002-mv-sparse-checkout.sh | 517 + t/t7003-filter-branch.sh | 540 + t/t7004-tag.sh | 2335 ++ t/t7005-editor.sh | 131 + t/t7006-pager.sh | 761 + t/t7007-show.sh | 170 + t/t7008-filter-branch-null-sha1.sh | 56 + t/t7010-setup.sh | 161 + t/t7011-skip-worktree-reading.sh | 147 + t/t7012-skip-worktree-writing.sh | 198 + t/t7030-verify-tag.sh | 206 + t/t7031-verify-tag-signed-ssh.sh | 213 + t/t7060-wtstatus.sh | 254 + t/t7061-wtstatus-ignore.sh | 316 + t/t7062-wtstatus-ignorecase.sh | 20 + t/t7063-status-untracked-cache.sh | 994 + t/t7064-wtstatus-pv2.sh | 673 + t/t7101-reset-empty-subdirs.sh | 65 + t/t7102-reset.sh | 637 + t/t7103-reset-bare.sh | 73 + t/t7104-reset-hard.sh | 46 + t/t7105-reset-patch.sh | 97 + t/t7106-reset-unborn-branch.sh | 68 + t/t7107-reset-pathspec-file.sh | 178 + t/t7110-reset-merge.sh | 295 + t/t7111-reset-table.sh | 121 + t/t7112-reset-submodule.sh | 20 + t/t7113-post-index-change-hook.sh | 146 + t/t7201-co.sh | 804 + t/t7300-clean.sh | 803 + t/t7301-clean-interactive.sh | 485 + t/t7400-submodule-basic.sh | 1485 + t/t7401-submodule-summary.sh | 315 + t/t7402-submodule-rebase.sh | 134 + t/t7403-submodule-sync.sh | 355 + t/t7406-submodule-update.sh | 1253 + t/t7407-submodule-foreach.sh | 440 + t/t7408-submodule-reference.sh | 228 + t/t7409-submodule-detached-work-tree.sh | 91 + t/t7411-submodule-config.sh | 261 + t/t7412-submodule-absorbgitdirs.sh | 183 + t/t7413-submodule-is-active.sh | 127 + t/t7414-submodule-mistakes.sh | 39 + t/t7416-submodule-dash-url.sh | 224 + t/t7417-submodule-path-url.sh | 52 + t/t7418-submodule-sparse-gitmodules.sh | 130 + t/t7419-submodule-set-branch.sh | 130 + t/t7420-submodule-set-url.sh | 81 + t/t7421-submodule-summary-add.sh | 73 + t/t7422-submodule-output.sh | 176 + t/t7423-submodule-symlinks.sh | 67 + t/t7424-submodule-mixed-ref-formats.sh | 143 + t/t7450-bad-git-dotfiles.sh | 375 + t/t7500-commit-template-squash-signoff.sh | 561 + t/t7500/add-comments | 4 + t/t7500/add-content | 3 + t/t7500/add-content-and-comment | 5 + t/t7500/add-signed-off | 3 + t/t7500/add-whitespaced-content | 8 + t/t7500/edit-content | 4 + t/t7501-commit-basic-functionality.sh | 796 + t/t7502-commit-porcelain.sh | 985 + ...3-pre-commit-and-pre-merge-commit-hooks.sh | 282 + t/t7504-commit-msg-hook.sh | 310 + t/t7505-prepare-commit-msg-hook.sh | 311 + t/t7505/expected-rebase-i | 18 + t/t7505/expected-rebase-p | 18 + t/t7506-status-submodule.sh | 414 + t/t7507-commit-verbose.sh | 169 + t/t7508-status.sh | 1777 + t/t7509-commit-authorship.sh | 174 + t/t7510-signed-commit.sh | 448 + t/t7511-status-index.sh | 50 + t/t7512-status-help.sh | 1064 + t/t7513-interpret-trailers.sh | 1992 ++ t/t7514-commit-patch.sh | 29 + t/t7515-status-symlinks.sh | 43 + t/t7516-commit-races.sh | 32 + t/t7517-per-repo-email.sh | 152 + t/t7518-ident-corner-cases.sh | 57 + t/t7519-status-fsmonitor.sh | 480 + t/t7519/fsmonitor-all | 23 + t/t7519/fsmonitor-all-v2 | 21 + t/t7519/fsmonitor-env | 24 + t/t7519/fsmonitor-none | 22 + t/t7519/fsmonitor-watchman | 127 + t/t7519/fsmonitor-watchman-v2 | 173 + t/t7520-ignored-hook-warning.sh | 38 + t/t7521-ignored-mode.sh | 233 + t/t7524-commit-summary.sh | 32 + t/t7525-status-rename.sh | 113 + t/t7526-commit-pathspec-file.sh | 164 + t/t7527-builtin-fsmonitor.sh | 1314 + t/t7528-signed-commit-ssh.sh | 462 + t/t7600-merge.sh | 1096 + t/t7601-merge-pull-config.sh | 525 + t/t7602-merge-octopus-many.sh | 107 + t/t7603-merge-reduce-heads.sh | 164 + t/t7604-merge-custom-message.sh | 115 + t/t7605-merge-resolve.sh | 52 + t/t7606-merge-custom.sh | 93 + t/t7607-merge-state.sh | 32 + t/t7608-merge-messages.sh | 63 + t/t7609-mergetool--lib.sh | 14 + t/t7610-mergetool.sh | 909 + t/t7611-merge-abort.sh | 204 + t/t7612-merge-verify-signatures.sh | 138 + t/t7614-merge-signoff.sh | 72 + t/t7615-diff-algo-with-mergy-operations.sh | 59 + t/t7615/base.c | 17 + t/t7615/ours.c | 17 + t/t7615/theirs.c | 17 + t/t7700-repack.sh | 829 + t/t7701-repack-unpack-unreachable.sh | 198 + t/t7702-repack-cyclic-alternate.sh | 25 + t/t7703-repack-geometric.sh | 448 + t/t7704-repack-cruft.sh | 414 + t/t7800-difftool.sh | 933 + t/t7810-grep.sh | 1932 + t/t7811-grep-open.sh | 158 + t/t7812-grep-icase-non-ascii.sh | 152 + t/t7813-grep-icase-iso.sh | 19 + t/t7814-grep-recurse-submodules.sh | 637 + t/t7815-grep-binary.sh | 148 + t/t7816-grep-binary-pattern.sh | 127 + t/t7817-grep-sparse-checkout.sh | 181 + t/t7900-maintenance.sh | 1027 + t/t8001-annotate.sh | 20 + t/t8002-blame.sh | 170 + t/t8003-blame-corner-cases.sh | 319 + t/t8004-blame-with-conflicts.sh | 76 + t/t8005-blame-i18n.sh | 103 + t/t8005/euc-japan.txt | 2 + t/t8005/sjis.txt | 2 + t/t8005/utf8.txt | 2 + t/t8006-blame-textconv.sh | 158 + t/t8007-cat-file-textconv.sh | 129 + t/t8008-blame-formats.sh | 110 + t/t8009-blame-vs-topicbranches.sh | 37 + t/t8010-cat-file-filters.sh | 70 + t/t8011-blame-split-file.sh | 118 + t/t8012-blame-colors.sh | 52 + t/t8013-blame-ignore-revs.sh | 292 + t/t8014-blame-ignore-fuzzy.sh | 438 + t/t9001-send-email.sh | 2838 ++ t/t9002-column.sh | 209 + t/t9003-help-autocorrect.sh | 70 + t/t9100-git-svn-basic.sh | 333 + t/t9101-git-svn-props.sh | 236 + t/t9102-git-svn-deep-rmdir.sh | 32 + t/t9103-git-svn-tracked-directory-removed.sh | 41 + t/t9104-git-svn-follow-parent.sh | 230 + t/t9105-git-svn-commit-diff.sh | 44 + t/t9106-git-svn-commit-diff-clobber.sh | 107 + t/t9107-git-svn-migrate.sh | 136 + t/t9108-git-svn-glob.sh | 116 + t/t9109-git-svn-multi-glob.sh | 167 + t/t9110-git-svn-use-svm-props.sh | 61 + t/t9110/svm.dump | 511 + t/t9111-git-svn-use-svnsync-props.sh | 51 + t/t9111/svnsync.dump | 560 + t/t9112-git-svn-md5less-file.sh | 47 + t/t9113-git-svn-dcommit-new-file.sh | 35 + t/t9114-git-svn-dcommit-merge.sh | 95 + t/t9115-git-svn-dcommit-funky-renames.sh | 123 + t/t9115/funky-names.dump | 103 + t/t9116-git-svn-log.sh | 150 + t/t9117-git-svn-init-clone.sh | 122 + t/t9118-git-svn-funky-branch-names.sh | 90 + t/t9119-git-svn-info.sh | 391 + t/t9120-git-svn-clone-with-percent-escapes.sh | 77 + t/t9121-git-svn-fetch-renamed-dir.sh | 20 + t/t9121/renamed-dir.dump | 90 + t/t9122-git-svn-author.sh | 85 + t/t9123-git-svn-rebuild-with-rewriteroot.sh | 32 + t/t9124-git-svn-dcommit-auto-props.sh | 105 + t/t9125-git-svn-multi-glob-branch-names.sh | 37 + ...it-svn-follow-deleted-readded-directory.sh | 22 + t/t9126/follow-deleted-readded.dump | 201 + t/t9127-git-svn-partial-rebuild.sh | 60 + t/t9128-git-svn-cmd-branch.sh | 79 + t/t9129-git-svn-i18n-commitencoding.sh | 91 + t/t9130-git-svn-authors-file.sh | 131 + t/t9131-git-svn-empty-symlink.sh | 110 + t/t9132-git-svn-broken-symlink.sh | 102 + t/t9133-git-svn-nested-git-repo.sh | 101 + t/t9134-git-svn-ignore-paths.sh | 147 + t/t9135-git-svn-moved-branch-empty-file.sh | 20 + t/t9135/svn.dump | 192 + ...136-git-svn-recreated-branch-empty-file.sh | 12 + t/t9136/svn.dump | 192 + t/t9137-git-svn-dcommit-clobber-series.sh | 63 + t/t9138-git-svn-authors-prog.sh | 107 + t/t9139-git-svn-non-utf8-commitencoding.sh | 47 + t/t9140-git-svn-reset.sh | 66 + t/t9141-git-svn-multiple-branches.sh | 122 + t/t9142-git-svn-shallow-clone.sh | 29 + t/t9143-git-svn-gc.sh | 51 + t/t9144-git-svn-old-rev_map.sh | 31 + t/t9145-git-svn-master-branch.sh | 28 + t/t9146-git-svn-empty-dirs.sh | 128 + t/t9147-git-svn-include-paths.sh | 149 + t/t9148-git-svn-propset.sh | 98 + t/t9150-svk-mergetickets.sh | 25 + t/t9150/make-svk-dump | 57 + t/t9150/svk-merge.dump | 616 + t/t9151-svn-mergeinfo.sh | 54 + t/t9151/.gitignore | 2 + t/t9151/make-svnmerge-dump | 305 + t/t9151/svn-mergeinfo.dump | 2388 ++ t/t9152-svn-empty-dirs-after-gc.sh | 40 + t/t9153-git-svn-rewrite-uuid.sh | 25 + t/t9153/svn.dump | 75 + t/t9154-git-svn-fancy-glob.sh | 51 + t/t9154/svn.dump | 222 + t/t9155-git-svn-fetch-deleted-tag.sh | 45 + t/t9156-git-svn-fetch-deleted-tag-2.sh | 47 + t/t9157-git-svn-fetch-merge.sh | 58 + t/t9158-git-svn-mergeinfo.sh | 52 + t/t9159-git-svn-no-parent-mergeinfo.sh | 41 + t/t9160-git-svn-preserve-empty-dirs.sh | 152 + t/t9161-git-svn-mergeinfo-push.sh | 103 + t/t9161/branches.dump | 374 + t/t9162-git-svn-dcommit-interactive.sh | 65 + t/t9163-git-svn-reset-clears-caches.sh | 81 + t/t9164-git-svn-dcommit-concurrent.sh | 224 + ...65-git-svn-fetch-merge-branch-of-branch.sh | 60 + ...6-git-svn-fetch-merge-branch-of-branch2.sh | 53 + t/t9167-git-svn-cmd-branch-subproject.sh | 49 + t/t9168-git-svn-partially-globbed-names.sh | 229 + t/t9169-git-svn-dcommit-crlf.sh | 30 + t/t9200-git-cvsexportcommit.sh | 341 + t/t9210-scalar.sh | 301 + t/t9211-scalar-clone.sh | 195 + t/t9300-fast-import.sh | 3938 ++ t/t9301-fast-import-notes.sh | 727 + t/t9302-fast-import-unpack-limit.sh | 106 + t/t9303-fast-import-compression.sh | 62 + t/t9304-fast-import-marks.sh | 82 + t/t9350-fast-export.sh | 804 + t/t9350/broken-iso-8859-7-commit-message.txt | 1 + t/t9350/simple-iso-8859-7-commit-message.txt | 1 + t/t9351-fast-export-anonymize.sh | 141 + t/t9400-git-cvsserver-server.sh | 669 + t/t9401-git-cvsserver-crlf.sh | 372 + t/t9402-git-cvsserver-refs.sh | 554 + t/t9500-gitweb-standalone-no-errors.sh | 815 + t/t9501-gitweb-standalone-http-status.sh | 220 + t/t9502-gitweb-standalone-parse-output.sh | 237 + t/t9600-cvsimport.sh | 167 + t/t9601-cvsimport-vendor-branch.sh | 88 + t/t9601/cvsroot/.gitattributes | 1 + t/t9601/cvsroot/CVSROOT/.gitignore | 2 + t/t9601/cvsroot/module/added-imported.txt,v | 44 + .../cvsroot/module/imported-anonymously.txt,v | 42 + .../module/imported-modified-imported.txt,v | 76 + .../cvsroot/module/imported-modified.txt,v | 59 + t/t9601/cvsroot/module/imported-once.txt,v | 43 + t/t9601/cvsroot/module/imported-twice.txt,v | 60 + t/t9602-cvsimport-branches-tags.sh | 81 + t/t9602/README | 62 + t/t9602/cvsroot/.gitattributes | 1 + t/t9602/cvsroot/CVSROOT/.gitignore | 2 + t/t9602/cvsroot/module/default,v | 102 + t/t9602/cvsroot/module/sub1/default,v | 102 + t/t9602/cvsroot/module/sub1/subsubA/default,v | 101 + t/t9602/cvsroot/module/sub1/subsubB/default,v | 107 + .../module/sub2/Attic/branch_B_MIXED_only,v | 59 + t/t9602/cvsroot/module/sub2/default,v | 102 + t/t9602/cvsroot/module/sub2/subsubA/default,v | 102 + t/t9602/cvsroot/module/sub3/default,v | 102 + t/t9603-cvsimport-patchsets.sh | 40 + t/t9603/cvsroot/.gitattributes | 1 + t/t9603/cvsroot/CVSROOT/.gitignore | 2 + t/t9603/cvsroot/module/a,v | 74 + t/t9603/cvsroot/module/b,v | 90 + t/t9604-cvsimport-timestamps.sh | 89 + t/t9604/cvsroot/.gitattributes | 1 + t/t9604/cvsroot/CVSROOT/.gitignore | 2 + t/t9604/cvsroot/module/a,v | 264 + t/t9700-perl-git.sh | 56 + t/t9700/test.pl | 165 + t/t9800-git-p4-basic.sh | 433 + t/t9801-git-p4-branch.sh | 760 + t/t9802-git-p4-filetype.sh | 382 + t/t9803-git-p4-shell-metachars.sh | 108 + t/t9804-git-p4-label.sh | 111 + t/t9805-git-p4-skip-submit-edit.sh | 101 + t/t9806-git-p4-options.sh | 306 + t/t9807-git-p4-submit.sh | 599 + t/t9808-git-p4-chdir.sh | 86 + t/t9809-git-p4-client-view.sh | 839 + t/t9810-git-p4-rcs.sh | 377 + t/t9811-git-p4-label-import.sh | 265 + t/t9812-git-p4-wildcards.sh | 214 + t/t9813-git-p4-preserve-users.sh | 141 + t/t9814-git-p4-rename.sh | 245 + t/t9815-git-p4-submit-fail.sh | 425 + t/t9816-git-p4-locked.sh | 141 + t/t9817-git-p4-exclude.sh | 108 + t/t9818-git-p4-block.sh | 149 + t/t9819-git-p4-case-folding.sh | 56 + t/t9820-git-p4-editor-handling.sh | 34 + t/t9821-git-p4-path-variations.sh | 196 + t/t9822-git-p4-path-encoding.sh | 77 + t/t9823-git-p4-mock-lfs.sh | 188 + t/t9824-git-p4-git-lfs.sh | 290 + t/t9825-git-p4-handle-utf16-without-bom.sh | 62 + t/t9826-git-p4-keep-empty-commits.sh | 130 + t/t9827-git-p4-change-filetype.sh | 62 + t/t9828-git-p4-map-user.sh | 57 + t/t9829-git-p4-jobs.sh | 95 + t/t9830-git-p4-symlink-dir.sh | 39 + t/t9831-git-p4-triggers.sh | 99 + t/t9832-unshelve.sh | 188 + t/t9833-errors.sh | 48 + t/t9834-git-p4-file-dir-bug.sh | 70 + t/t9835-git-p4-metadata-encoding-python2.sh | 213 + t/t9836-git-p4-metadata-encoding-python3.sh | 214 + t/t9850-shell.sh | 38 + t/t9901-git-web--browse.sh | 63 + t/t9902-completion.sh | 3089 ++ t/t9903-bash-prompt.sh | 778 + t/test-binary-1.png | Bin 0 -> 5660 bytes t/test-binary-2.png | Bin 0 -> 275 bytes t/test-lib-functions.sh | 2019 ++ t/test-lib-github-workflow-markup.sh | 56 + t/test-lib-junit.sh | 132 + t/test-lib.sh | 1893 + t/test-terminal.perl | 82 + t/unit-tests/.gitignore | 3 + t/unit-tests/clar/.editorconfig | 13 + t/unit-tests/clar/.github/workflows/ci.yml | 35 + t/unit-tests/clar/.gitignore | 1 + t/unit-tests/clar/CMakeLists.txt | 28 + t/unit-tests/clar/COPYING | 15 + t/unit-tests/clar/README.md | 329 + t/unit-tests/clar/clar.c | 857 + t/unit-tests/clar/clar.h | 173 + t/unit-tests/clar/clar/fixtures.h | 50 + t/unit-tests/clar/clar/fs.h | 524 + t/unit-tests/clar/clar/print.h | 216 + t/unit-tests/clar/clar/sandbox.h | 158 + t/unit-tests/clar/clar/summary.h | 139 + t/unit-tests/clar/generate.py | 266 + t/unit-tests/clar/test/CMakeLists.txt | 39 + t/unit-tests/clar/test/clar_test.h | 16 + t/unit-tests/clar/test/main.c | 40 + t/unit-tests/clar/test/main.c.sample | 27 + t/unit-tests/clar/test/resources/test/file | 1 + t/unit-tests/clar/test/sample.c | 84 + t/unit-tests/generate-clar-decls.sh | 20 + t/unit-tests/generate-clar-suites.sh | 63 + t/unit-tests/lib-oid.c | 52 + t/unit-tests/lib-oid.h | 25 + t/unit-tests/lib-reftable.c | 98 + t/unit-tests/lib-reftable.h | 21 + t/unit-tests/t-example-decorate.c | 74 + t/unit-tests/t-hashmap.c | 361 + t/unit-tests/t-oid-array.c | 126 + t/unit-tests/t-oidmap.c | 181 + t/unit-tests/t-oidtree.c | 122 + t/unit-tests/t-reftable-basics.c | 201 + t/unit-tests/t-reftable-block.c | 383 + t/unit-tests/t-reftable-merged.c | 546 + t/unit-tests/t-reftable-pq.c | 153 + t/unit-tests/t-reftable-reader.c | 96 + t/unit-tests/t-reftable-readwrite.c | 985 + t/unit-tests/t-reftable-record.c | 569 + t/unit-tests/t-reftable-stack.c | 1403 + t/unit-tests/t-strbuf.c | 122 + t/unit-tests/t-strcmp-offset.c | 35 + t/unit-tests/t-trailer.c | 317 + t/unit-tests/t-urlmatch-normalization.c | 271 + t/unit-tests/test-lib.c | 456 + t/unit-tests/test-lib.h | 183 + t/unit-tests/u-ctype.c | 102 + t/unit-tests/u-hash.c | 109 + t/unit-tests/u-mem-pool.c | 25 + t/unit-tests/u-prio-queue.c | 94 + t/unit-tests/u-reftable-tree.c | 78 + t/unit-tests/u-strvec.c | 316 + t/unit-tests/unit-test.c | 64 + t/unit-tests/unit-test.h | 10 + t/valgrind/.gitignore | 2 + t/valgrind/analyze.sh | 127 + t/valgrind/default.supp | 51 + t/valgrind/valgrind.sh | 40 + tag.c | 245 + tag.h | 24 + tar.h | 30 + tempfile.c | 373 + tempfile.h | 285 + templates/.gitignore | 2 + templates/Makefile | 75 + templates/description | 1 + templates/hooks/applypatch-msg.sample | 15 + templates/hooks/commit-msg.sample | 24 + templates/hooks/fsmonitor-watchman.sample | 174 + templates/hooks/meson.build | 26 + templates/hooks/post-update.sample | 8 + templates/hooks/pre-applypatch.sample | 14 + templates/hooks/pre-commit.sample | 49 + templates/hooks/pre-merge-commit.sample | 13 + templates/hooks/pre-push.sample | 53 + templates/hooks/pre-rebase.sample | 169 + templates/hooks/pre-receive.sample | 24 + templates/hooks/prepare-commit-msg.sample | 42 + templates/hooks/push-to-checkout.sample | 78 + templates/hooks/sendemail-validate.sample | 77 + templates/hooks/update.sample | 128 + templates/info/exclude | 6 + templates/info/meson.build | 7 + templates/meson.build | 15 + thread-utils.c | 125 + thread-utils.h | 57 + tmp-objdir.c | 335 + tmp-objdir.h | 86 + trace.c | 430 + trace.h | 279 + trace2.c | 1044 + trace2.h | 593 + trace2/tr2_cfg.c | 160 + trace2/tr2_cfg.h | 27 + trace2/tr2_cmd_name.c | 31 + trace2/tr2_cmd_name.h | 24 + trace2/tr2_ctr.c | 120 + trace2/tr2_ctr.h | 104 + trace2/tr2_dst.c | 396 + trace2/tr2_dst.h | 38 + trace2/tr2_sid.c | 114 + trace2/tr2_sid.h | 18 + trace2/tr2_sysenv.c | 138 + trace2/tr2_sysenv.h | 39 + trace2/tr2_tbuf.c | 47 + trace2/tr2_tbuf.h | 24 + trace2/tr2_tgt.h | 160 + trace2/tr2_tgt_event.c | 721 + trace2/tr2_tgt_normal.c | 409 + trace2/tr2_tgt_perf.c | 634 + trace2/tr2_tls.c | 203 + trace2/tr2_tls.h | 123 + trace2/tr2_tmr.c | 182 + trace2/tr2_tmr.h | 140 + trailer.c | 1237 + trailer.h | 205 + transport-helper.c | 1674 + transport-internal.h | 71 + transport.c | 1698 + transport.h | 349 + tree-diff.c | 748 + tree-walk.c | 1288 + tree-walk.h | 231 + tree.c | 222 + tree.h | 56 + unicode-width.h | 494 + unimplemented.sh | 4 + unix-socket.c | 139 + unix-socket.h | 15 + unix-stream-server.c | 125 + unix-stream-server.h | 33 + unpack-trees.c | 3070 ++ unpack-trees.h | 140 + upload-pack.c | 1880 + upload-pack.h | 15 + url.c | 121 + url.h | 24 + urlmatch.c | 624 + urlmatch.h | 78 + usage.c | 374 + userdiff.c | 571 + userdiff.h | 61 + utf8.c | 826 + utf8.h | 110 + varint.c | 30 + varint.h | 7 + version-def.h.in | 8 + version.c | 44 + version.h | 10 + versioncmp.c | 202 + versioncmp.h | 6 + walker.c | 360 + walker.h | 38 + wildmatch.c | 287 + wildmatch.h | 11 + worktree.c | 1051 + worktree.h | 232 + wrapper.c | 831 + wrapper.h | 169 + write-or-die.c | 109 + write-or-die.h | 78 + ws.c | 391 + ws.h | 33 + wt-status.c | 2689 ++ wt-status.h | 188 + xdiff-interface.c | 342 + xdiff-interface.h | 75 + xdiff/xdiff.h | 153 + xdiff/xdiffi.c | 1090 + xdiff/xdiffi.h | 62 + xdiff/xemit.c | 330 + xdiff/xemit.h | 36 + xdiff/xhistogram.c | 370 + xdiff/xinclude.h | 38 + xdiff/xmacros.h | 71 + xdiff/xmerge.c | 739 + xdiff/xpatience.c | 373 + xdiff/xprepare.c | 461 + xdiff/xprepare.h | 34 + xdiff/xtypes.h | 67 + xdiff/xutils.c | 451 + xdiff/xutils.h | 48 + 4591 files changed, 1515175 insertions(+) create mode 100644 .cirrus.yml create mode 100644 .clang-format create mode 100644 .editorconfig create mode 100644 .gitattributes create mode 100644 .github/CONTRIBUTING.md create mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 .github/workflows/check-style.yml create mode 100644 .github/workflows/check-whitespace.yml create mode 100644 .github/workflows/coverity.yml create mode 100644 .github/workflows/l10n.yml create mode 100644 .github/workflows/main.yml create mode 100644 .gitignore create mode 100644 .gitlab-ci.yml create mode 100644 .gitmodules create mode 100644 .mailmap create mode 100644 .tsan-suppressions create mode 100644 CODE_OF_CONDUCT.md create mode 100644 COPYING create mode 100644 Documentation/.gitattributes create mode 100644 Documentation/.gitignore create mode 100644 Documentation/BreakingChanges.adoc create mode 100644 Documentation/CodingGuidelines create mode 100644 Documentation/DecisionMaking.adoc create mode 100644 Documentation/Makefile create mode 100644 Documentation/MyFirstContribution.adoc create mode 100644 Documentation/MyFirstObjectWalk.adoc create mode 100644 Documentation/RelNotes/1.5.0.1.txt create mode 100644 Documentation/RelNotes/1.5.0.2.txt create mode 100644 Documentation/RelNotes/1.5.0.3.txt create mode 100644 Documentation/RelNotes/1.5.0.4.txt create mode 100644 Documentation/RelNotes/1.5.0.5.txt create mode 100644 Documentation/RelNotes/1.5.0.6.txt create mode 100644 Documentation/RelNotes/1.5.0.7.txt create mode 100644 Documentation/RelNotes/1.5.0.txt create mode 100644 Documentation/RelNotes/1.5.1.1.txt create mode 100644 Documentation/RelNotes/1.5.1.2.txt create mode 100644 Documentation/RelNotes/1.5.1.3.txt create mode 100644 Documentation/RelNotes/1.5.1.4.txt create mode 100644 Documentation/RelNotes/1.5.1.5.txt create mode 100644 Documentation/RelNotes/1.5.1.6.txt create mode 100644 Documentation/RelNotes/1.5.1.txt create mode 100644 Documentation/RelNotes/1.5.2.1.txt create mode 100644 Documentation/RelNotes/1.5.2.2.txt create mode 100644 Documentation/RelNotes/1.5.2.3.txt create mode 100644 Documentation/RelNotes/1.5.2.4.txt create mode 100644 Documentation/RelNotes/1.5.2.5.txt create mode 100644 Documentation/RelNotes/1.5.2.txt create mode 100644 Documentation/RelNotes/1.5.3.1.txt create mode 100644 Documentation/RelNotes/1.5.3.2.txt create mode 100644 Documentation/RelNotes/1.5.3.3.txt create mode 100644 Documentation/RelNotes/1.5.3.4.txt create mode 100644 Documentation/RelNotes/1.5.3.5.txt create mode 100644 Documentation/RelNotes/1.5.3.6.txt create mode 100644 Documentation/RelNotes/1.5.3.7.txt create mode 100644 Documentation/RelNotes/1.5.3.8.txt create mode 100644 Documentation/RelNotes/1.5.3.txt create mode 100644 Documentation/RelNotes/1.5.4.1.txt create mode 100644 Documentation/RelNotes/1.5.4.2.txt create mode 100644 Documentation/RelNotes/1.5.4.3.txt create mode 100644 Documentation/RelNotes/1.5.4.4.txt create mode 100644 Documentation/RelNotes/1.5.4.5.txt create mode 100644 Documentation/RelNotes/1.5.4.6.txt create mode 100644 Documentation/RelNotes/1.5.4.7.txt create mode 100644 Documentation/RelNotes/1.5.4.txt create mode 100644 Documentation/RelNotes/1.5.5.1.txt create mode 100644 Documentation/RelNotes/1.5.5.2.txt create mode 100644 Documentation/RelNotes/1.5.5.3.txt create mode 100644 Documentation/RelNotes/1.5.5.4.txt create mode 100644 Documentation/RelNotes/1.5.5.5.txt create mode 100644 Documentation/RelNotes/1.5.5.6.txt create mode 100644 Documentation/RelNotes/1.5.5.txt create mode 100644 Documentation/RelNotes/1.5.6.1.txt create mode 100644 Documentation/RelNotes/1.5.6.2.txt create mode 100644 Documentation/RelNotes/1.5.6.3.txt create mode 100644 Documentation/RelNotes/1.5.6.4.txt create mode 100644 Documentation/RelNotes/1.5.6.5.txt create mode 100644 Documentation/RelNotes/1.5.6.6.txt create mode 100644 Documentation/RelNotes/1.5.6.txt create mode 100644 Documentation/RelNotes/1.6.0.1.txt create mode 100644 Documentation/RelNotes/1.6.0.2.txt create mode 100644 Documentation/RelNotes/1.6.0.3.txt create mode 100644 Documentation/RelNotes/1.6.0.4.txt create mode 100644 Documentation/RelNotes/1.6.0.5.txt create mode 100644 Documentation/RelNotes/1.6.0.6.txt create mode 100644 Documentation/RelNotes/1.6.0.txt create mode 100644 Documentation/RelNotes/1.6.1.1.txt create mode 100644 Documentation/RelNotes/1.6.1.2.txt create mode 100644 Documentation/RelNotes/1.6.1.3.txt create mode 100644 Documentation/RelNotes/1.6.1.4.txt create mode 100644 Documentation/RelNotes/1.6.1.txt create mode 100644 Documentation/RelNotes/1.6.2.1.txt create mode 100644 Documentation/RelNotes/1.6.2.2.txt create mode 100644 Documentation/RelNotes/1.6.2.3.txt create mode 100644 Documentation/RelNotes/1.6.2.4.txt create mode 100644 Documentation/RelNotes/1.6.2.5.txt create mode 100644 Documentation/RelNotes/1.6.2.txt create mode 100644 Documentation/RelNotes/1.6.3.1.txt create mode 100644 Documentation/RelNotes/1.6.3.2.txt create mode 100644 Documentation/RelNotes/1.6.3.3.txt create mode 100644 Documentation/RelNotes/1.6.3.4.txt create mode 100644 Documentation/RelNotes/1.6.3.txt create mode 100644 Documentation/RelNotes/1.6.4.1.txt create mode 100644 Documentation/RelNotes/1.6.4.2.txt create mode 100644 Documentation/RelNotes/1.6.4.3.txt create mode 100644 Documentation/RelNotes/1.6.4.4.txt create mode 100644 Documentation/RelNotes/1.6.4.5.txt create mode 100644 Documentation/RelNotes/1.6.4.txt create mode 100644 Documentation/RelNotes/1.6.5.1.txt create mode 100644 Documentation/RelNotes/1.6.5.2.txt create mode 100644 Documentation/RelNotes/1.6.5.3.txt create mode 100644 Documentation/RelNotes/1.6.5.4.txt create mode 100644 Documentation/RelNotes/1.6.5.5.txt create mode 100644 Documentation/RelNotes/1.6.5.6.txt create mode 100644 Documentation/RelNotes/1.6.5.7.txt create mode 100644 Documentation/RelNotes/1.6.5.8.txt create mode 100644 Documentation/RelNotes/1.6.5.9.txt create mode 100644 Documentation/RelNotes/1.6.5.txt create mode 100644 Documentation/RelNotes/1.6.6.1.txt create mode 100644 Documentation/RelNotes/1.6.6.2.txt create mode 100644 Documentation/RelNotes/1.6.6.3.txt create mode 100644 Documentation/RelNotes/1.6.6.txt create mode 100644 Documentation/RelNotes/1.7.0.1.txt create mode 100644 Documentation/RelNotes/1.7.0.2.txt create mode 100644 Documentation/RelNotes/1.7.0.3.txt create mode 100644 Documentation/RelNotes/1.7.0.4.txt create mode 100644 Documentation/RelNotes/1.7.0.5.txt create mode 100644 Documentation/RelNotes/1.7.0.6.txt create mode 100644 Documentation/RelNotes/1.7.0.7.txt create mode 100644 Documentation/RelNotes/1.7.0.8.txt create mode 100644 Documentation/RelNotes/1.7.0.9.txt create mode 100644 Documentation/RelNotes/1.7.0.txt create mode 100644 Documentation/RelNotes/1.7.1.1.txt create mode 100644 Documentation/RelNotes/1.7.1.2.txt create mode 100644 Documentation/RelNotes/1.7.1.3.txt create mode 100644 Documentation/RelNotes/1.7.1.4.txt create mode 100644 Documentation/RelNotes/1.7.1.txt create mode 100644 Documentation/RelNotes/1.7.10.1.txt create mode 100644 Documentation/RelNotes/1.7.10.2.txt create mode 100644 Documentation/RelNotes/1.7.10.3.txt create mode 100644 Documentation/RelNotes/1.7.10.4.txt create mode 100644 Documentation/RelNotes/1.7.10.5.txt create mode 100644 Documentation/RelNotes/1.7.10.txt create mode 100644 Documentation/RelNotes/1.7.11.1.txt create mode 100644 Documentation/RelNotes/1.7.11.2.txt create mode 100644 Documentation/RelNotes/1.7.11.3.txt create mode 100644 Documentation/RelNotes/1.7.11.4.txt create mode 100644 Documentation/RelNotes/1.7.11.5.txt create mode 100644 Documentation/RelNotes/1.7.11.6.txt create mode 100644 Documentation/RelNotes/1.7.11.7.txt create mode 100644 Documentation/RelNotes/1.7.11.txt create mode 100644 Documentation/RelNotes/1.7.12.1.txt create mode 100644 Documentation/RelNotes/1.7.12.2.txt create mode 100644 Documentation/RelNotes/1.7.12.3.txt create mode 100644 Documentation/RelNotes/1.7.12.4.txt create mode 100644 Documentation/RelNotes/1.7.12.txt create mode 100644 Documentation/RelNotes/1.7.2.1.txt create mode 100644 Documentation/RelNotes/1.7.2.2.txt create mode 100644 Documentation/RelNotes/1.7.2.3.txt create mode 100644 Documentation/RelNotes/1.7.2.4.txt create mode 100644 Documentation/RelNotes/1.7.2.5.txt create mode 100644 Documentation/RelNotes/1.7.2.txt create mode 100644 Documentation/RelNotes/1.7.3.1.txt create mode 100644 Documentation/RelNotes/1.7.3.2.txt create mode 100644 Documentation/RelNotes/1.7.3.3.txt create mode 100644 Documentation/RelNotes/1.7.3.4.txt create mode 100644 Documentation/RelNotes/1.7.3.5.txt create mode 100644 Documentation/RelNotes/1.7.3.txt create mode 100644 Documentation/RelNotes/1.7.4.1.txt create mode 100644 Documentation/RelNotes/1.7.4.2.txt create mode 100644 Documentation/RelNotes/1.7.4.3.txt create mode 100644 Documentation/RelNotes/1.7.4.4.txt create mode 100644 Documentation/RelNotes/1.7.4.5.txt create mode 100644 Documentation/RelNotes/1.7.4.txt create mode 100644 Documentation/RelNotes/1.7.5.1.txt create mode 100644 Documentation/RelNotes/1.7.5.2.txt create mode 100644 Documentation/RelNotes/1.7.5.3.txt create mode 100644 Documentation/RelNotes/1.7.5.4.txt create mode 100644 Documentation/RelNotes/1.7.5.txt create mode 100644 Documentation/RelNotes/1.7.6.1.txt create mode 100644 Documentation/RelNotes/1.7.6.2.txt create mode 100644 Documentation/RelNotes/1.7.6.3.txt create mode 100644 Documentation/RelNotes/1.7.6.4.txt create mode 100644 Documentation/RelNotes/1.7.6.5.txt create mode 100644 Documentation/RelNotes/1.7.6.6.txt create mode 100644 Documentation/RelNotes/1.7.6.txt create mode 100644 Documentation/RelNotes/1.7.7.1.txt create mode 100644 Documentation/RelNotes/1.7.7.2.txt create mode 100644 Documentation/RelNotes/1.7.7.3.txt create mode 100644 Documentation/RelNotes/1.7.7.4.txt create mode 100644 Documentation/RelNotes/1.7.7.5.txt create mode 100644 Documentation/RelNotes/1.7.7.6.txt create mode 100644 Documentation/RelNotes/1.7.7.7.txt create mode 100644 Documentation/RelNotes/1.7.7.txt create mode 100644 Documentation/RelNotes/1.7.8.1.txt create mode 100644 Documentation/RelNotes/1.7.8.2.txt create mode 100644 Documentation/RelNotes/1.7.8.3.txt create mode 100644 Documentation/RelNotes/1.7.8.4.txt create mode 100644 Documentation/RelNotes/1.7.8.5.txt create mode 100644 Documentation/RelNotes/1.7.8.6.txt create mode 100644 Documentation/RelNotes/1.7.8.txt create mode 100644 Documentation/RelNotes/1.7.9.1.txt create mode 100644 Documentation/RelNotes/1.7.9.2.txt create mode 100644 Documentation/RelNotes/1.7.9.3.txt create mode 100644 Documentation/RelNotes/1.7.9.4.txt create mode 100644 Documentation/RelNotes/1.7.9.5.txt create mode 100644 Documentation/RelNotes/1.7.9.6.txt create mode 100644 Documentation/RelNotes/1.7.9.7.txt create mode 100644 Documentation/RelNotes/1.7.9.txt create mode 100644 Documentation/RelNotes/1.8.0.1.txt create mode 100644 Documentation/RelNotes/1.8.0.2.txt create mode 100644 Documentation/RelNotes/1.8.0.3.txt create mode 100644 Documentation/RelNotes/1.8.0.txt create mode 100644 Documentation/RelNotes/1.8.1.1.txt create mode 100644 Documentation/RelNotes/1.8.1.2.txt create mode 100644 Documentation/RelNotes/1.8.1.3.txt create mode 100644 Documentation/RelNotes/1.8.1.4.txt create mode 100644 Documentation/RelNotes/1.8.1.5.txt create mode 100644 Documentation/RelNotes/1.8.1.6.txt create mode 100644 Documentation/RelNotes/1.8.1.txt create mode 100644 Documentation/RelNotes/1.8.2.1.txt create mode 100644 Documentation/RelNotes/1.8.2.2.txt create mode 100644 Documentation/RelNotes/1.8.2.3.txt create mode 100644 Documentation/RelNotes/1.8.2.txt create mode 100644 Documentation/RelNotes/1.8.3.1.txt create mode 100644 Documentation/RelNotes/1.8.3.2.txt create mode 100644 Documentation/RelNotes/1.8.3.3.txt create mode 100644 Documentation/RelNotes/1.8.3.4.txt create mode 100644 Documentation/RelNotes/1.8.3.txt create mode 100644 Documentation/RelNotes/1.8.4.1.txt create mode 100644 Documentation/RelNotes/1.8.4.2.txt create mode 100644 Documentation/RelNotes/1.8.4.3.txt create mode 100644 Documentation/RelNotes/1.8.4.4.txt create mode 100644 Documentation/RelNotes/1.8.4.5.txt create mode 100644 Documentation/RelNotes/1.8.4.txt create mode 100644 Documentation/RelNotes/1.8.5.1.txt create mode 100644 Documentation/RelNotes/1.8.5.2.txt create mode 100644 Documentation/RelNotes/1.8.5.3.txt create mode 100644 Documentation/RelNotes/1.8.5.4.txt create mode 100644 Documentation/RelNotes/1.8.5.5.txt create mode 100644 Documentation/RelNotes/1.8.5.6.txt create mode 100644 Documentation/RelNotes/1.8.5.txt create mode 100644 Documentation/RelNotes/1.9.0.txt create mode 100644 Documentation/RelNotes/1.9.1.txt create mode 100644 Documentation/RelNotes/1.9.2.txt create mode 100644 Documentation/RelNotes/1.9.3.txt create mode 100644 Documentation/RelNotes/1.9.4.txt create mode 100644 Documentation/RelNotes/1.9.5.txt create mode 100644 Documentation/RelNotes/2.0.0.txt create mode 100644 Documentation/RelNotes/2.0.1.txt create mode 100644 Documentation/RelNotes/2.0.2.txt create mode 100644 Documentation/RelNotes/2.0.3.txt create mode 100644 Documentation/RelNotes/2.0.4.txt create mode 100644 Documentation/RelNotes/2.0.5.txt create mode 100644 Documentation/RelNotes/2.1.0.txt create mode 100644 Documentation/RelNotes/2.1.1.txt create mode 100644 Documentation/RelNotes/2.1.2.txt create mode 100644 Documentation/RelNotes/2.1.3.txt create mode 100644 Documentation/RelNotes/2.1.4.txt create mode 100644 Documentation/RelNotes/2.10.0.txt create mode 100644 Documentation/RelNotes/2.10.1.txt create mode 100644 Documentation/RelNotes/2.10.2.txt create mode 100644 Documentation/RelNotes/2.10.3.txt create mode 100644 Documentation/RelNotes/2.10.4.txt create mode 100644 Documentation/RelNotes/2.10.5.txt create mode 100644 Documentation/RelNotes/2.11.0.txt create mode 100644 Documentation/RelNotes/2.11.1.txt create mode 100644 Documentation/RelNotes/2.11.2.txt create mode 100644 Documentation/RelNotes/2.11.3.txt create mode 100644 Documentation/RelNotes/2.11.4.txt create mode 100644 Documentation/RelNotes/2.12.0.txt create mode 100644 Documentation/RelNotes/2.12.1.txt create mode 100644 Documentation/RelNotes/2.12.2.txt create mode 100644 Documentation/RelNotes/2.12.3.txt create mode 100644 Documentation/RelNotes/2.12.4.txt create mode 100644 Documentation/RelNotes/2.12.5.txt create mode 100644 Documentation/RelNotes/2.13.0.txt create mode 100644 Documentation/RelNotes/2.13.1.txt create mode 100644 Documentation/RelNotes/2.13.2.txt create mode 100644 Documentation/RelNotes/2.13.3.txt create mode 100644 Documentation/RelNotes/2.13.4.txt create mode 100644 Documentation/RelNotes/2.13.5.txt create mode 100644 Documentation/RelNotes/2.13.6.txt create mode 100644 Documentation/RelNotes/2.13.7.txt create mode 100644 Documentation/RelNotes/2.14.0.txt create mode 100644 Documentation/RelNotes/2.14.1.txt create mode 100644 Documentation/RelNotes/2.14.2.txt create mode 100644 Documentation/RelNotes/2.14.3.txt create mode 100644 Documentation/RelNotes/2.14.4.txt create mode 100644 Documentation/RelNotes/2.14.5.txt create mode 100644 Documentation/RelNotes/2.14.6.txt create mode 100644 Documentation/RelNotes/2.15.0.txt create mode 100644 Documentation/RelNotes/2.15.1.txt create mode 100644 Documentation/RelNotes/2.15.2.txt create mode 100644 Documentation/RelNotes/2.15.3.txt create mode 100644 Documentation/RelNotes/2.15.4.txt create mode 100644 Documentation/RelNotes/2.16.0.txt create mode 100644 Documentation/RelNotes/2.16.1.txt create mode 100644 Documentation/RelNotes/2.16.2.txt create mode 100644 Documentation/RelNotes/2.16.3.txt create mode 100644 Documentation/RelNotes/2.16.4.txt create mode 100644 Documentation/RelNotes/2.16.5.txt create mode 100644 Documentation/RelNotes/2.16.6.txt create mode 100644 Documentation/RelNotes/2.17.0.txt create mode 100644 Documentation/RelNotes/2.17.1.txt create mode 100644 Documentation/RelNotes/2.17.2.txt create mode 100644 Documentation/RelNotes/2.17.3.txt create mode 100644 Documentation/RelNotes/2.17.4.txt create mode 100644 Documentation/RelNotes/2.17.5.txt create mode 100644 Documentation/RelNotes/2.17.6.txt create mode 100644 Documentation/RelNotes/2.18.0.txt create mode 100644 Documentation/RelNotes/2.18.1.txt create mode 100644 Documentation/RelNotes/2.18.2.txt create mode 100644 Documentation/RelNotes/2.18.3.txt create mode 100644 Documentation/RelNotes/2.18.4.txt create mode 100644 Documentation/RelNotes/2.18.5.txt create mode 100644 Documentation/RelNotes/2.19.0.txt create mode 100644 Documentation/RelNotes/2.19.1.txt create mode 100644 Documentation/RelNotes/2.19.2.txt create mode 100644 Documentation/RelNotes/2.19.3.txt create mode 100644 Documentation/RelNotes/2.19.4.txt create mode 100644 Documentation/RelNotes/2.19.5.txt create mode 100644 Documentation/RelNotes/2.19.6.txt create mode 100644 Documentation/RelNotes/2.2.0.txt create mode 100644 Documentation/RelNotes/2.2.1.txt create mode 100644 Documentation/RelNotes/2.2.2.txt create mode 100644 Documentation/RelNotes/2.2.3.txt create mode 100644 Documentation/RelNotes/2.20.0.txt create mode 100644 Documentation/RelNotes/2.20.1.txt create mode 100644 Documentation/RelNotes/2.20.2.txt create mode 100644 Documentation/RelNotes/2.20.3.txt create mode 100644 Documentation/RelNotes/2.20.4.txt create mode 100644 Documentation/RelNotes/2.20.5.txt create mode 100644 Documentation/RelNotes/2.21.0.txt create mode 100644 Documentation/RelNotes/2.21.1.txt create mode 100644 Documentation/RelNotes/2.21.2.txt create mode 100644 Documentation/RelNotes/2.21.3.txt create mode 100644 Documentation/RelNotes/2.21.4.txt create mode 100644 Documentation/RelNotes/2.22.0.txt create mode 100644 Documentation/RelNotes/2.22.1.txt create mode 100644 Documentation/RelNotes/2.22.2.txt create mode 100644 Documentation/RelNotes/2.22.3.txt create mode 100644 Documentation/RelNotes/2.22.4.txt create mode 100644 Documentation/RelNotes/2.22.5.txt create mode 100644 Documentation/RelNotes/2.23.0.txt create mode 100644 Documentation/RelNotes/2.23.1.txt create mode 100644 Documentation/RelNotes/2.23.2.txt create mode 100644 Documentation/RelNotes/2.23.3.txt create mode 100644 Documentation/RelNotes/2.23.4.txt create mode 100644 Documentation/RelNotes/2.24.0.txt create mode 100644 Documentation/RelNotes/2.24.1.txt create mode 100644 Documentation/RelNotes/2.24.2.txt create mode 100644 Documentation/RelNotes/2.24.3.txt create mode 100644 Documentation/RelNotes/2.24.4.txt create mode 100644 Documentation/RelNotes/2.25.0.txt create mode 100644 Documentation/RelNotes/2.25.1.txt create mode 100644 Documentation/RelNotes/2.25.2.txt create mode 100644 Documentation/RelNotes/2.25.3.txt create mode 100644 Documentation/RelNotes/2.25.4.txt create mode 100644 Documentation/RelNotes/2.25.5.txt create mode 100644 Documentation/RelNotes/2.26.0.txt create mode 100644 Documentation/RelNotes/2.26.1.txt create mode 100644 Documentation/RelNotes/2.26.2.txt create mode 100644 Documentation/RelNotes/2.26.3.txt create mode 100644 Documentation/RelNotes/2.27.0.txt create mode 100644 Documentation/RelNotes/2.27.1.txt create mode 100644 Documentation/RelNotes/2.28.0.txt create mode 100644 Documentation/RelNotes/2.28.1.txt create mode 100644 Documentation/RelNotes/2.29.0.txt create mode 100644 Documentation/RelNotes/2.29.1.txt create mode 100644 Documentation/RelNotes/2.29.2.txt create mode 100644 Documentation/RelNotes/2.29.3.txt create mode 100644 Documentation/RelNotes/2.3.0.txt create mode 100644 Documentation/RelNotes/2.3.1.txt create mode 100644 Documentation/RelNotes/2.3.10.txt create mode 100644 Documentation/RelNotes/2.3.2.txt create mode 100644 Documentation/RelNotes/2.3.3.txt create mode 100644 Documentation/RelNotes/2.3.4.txt create mode 100644 Documentation/RelNotes/2.3.5.txt create mode 100644 Documentation/RelNotes/2.3.6.txt create mode 100644 Documentation/RelNotes/2.3.7.txt create mode 100644 Documentation/RelNotes/2.3.8.txt create mode 100644 Documentation/RelNotes/2.3.9.txt create mode 100644 Documentation/RelNotes/2.30.0.txt create mode 100644 Documentation/RelNotes/2.30.1.txt create mode 100644 Documentation/RelNotes/2.30.2.txt create mode 100644 Documentation/RelNotes/2.30.3.txt create mode 100644 Documentation/RelNotes/2.30.4.txt create mode 100644 Documentation/RelNotes/2.30.5.txt create mode 100644 Documentation/RelNotes/2.30.6.txt create mode 100644 Documentation/RelNotes/2.30.7.txt create mode 100644 Documentation/RelNotes/2.30.8.txt create mode 100644 Documentation/RelNotes/2.30.9.txt create mode 100644 Documentation/RelNotes/2.31.0.txt create mode 100644 Documentation/RelNotes/2.31.1.txt create mode 100644 Documentation/RelNotes/2.31.2.txt create mode 100644 Documentation/RelNotes/2.31.3.txt create mode 100644 Documentation/RelNotes/2.31.4.txt create mode 100644 Documentation/RelNotes/2.31.5.txt create mode 100644 Documentation/RelNotes/2.31.6.txt create mode 100644 Documentation/RelNotes/2.31.7.txt create mode 100644 Documentation/RelNotes/2.31.8.txt create mode 100644 Documentation/RelNotes/2.32.0.txt create mode 100644 Documentation/RelNotes/2.32.1.txt create mode 100644 Documentation/RelNotes/2.32.2.txt create mode 100644 Documentation/RelNotes/2.32.3.txt create mode 100644 Documentation/RelNotes/2.32.4.txt create mode 100644 Documentation/RelNotes/2.32.5.txt create mode 100644 Documentation/RelNotes/2.32.6.txt create mode 100644 Documentation/RelNotes/2.32.7.txt create mode 100644 Documentation/RelNotes/2.33.0.txt create mode 100644 Documentation/RelNotes/2.33.1.txt create mode 100644 Documentation/RelNotes/2.33.2.txt create mode 100644 Documentation/RelNotes/2.33.3.txt create mode 100644 Documentation/RelNotes/2.33.4.txt create mode 100644 Documentation/RelNotes/2.33.5.txt create mode 100644 Documentation/RelNotes/2.33.6.txt create mode 100644 Documentation/RelNotes/2.33.7.txt create mode 100644 Documentation/RelNotes/2.33.8.txt create mode 100644 Documentation/RelNotes/2.34.0.txt create mode 100644 Documentation/RelNotes/2.34.1.txt create mode 100644 Documentation/RelNotes/2.34.2.txt create mode 100644 Documentation/RelNotes/2.34.3.txt create mode 100644 Documentation/RelNotes/2.34.4.txt create mode 100644 Documentation/RelNotes/2.34.5.txt create mode 100644 Documentation/RelNotes/2.34.6.txt create mode 100644 Documentation/RelNotes/2.34.7.txt create mode 100644 Documentation/RelNotes/2.34.8.txt create mode 100644 Documentation/RelNotes/2.35.0.txt create mode 100644 Documentation/RelNotes/2.35.1.txt create mode 100644 Documentation/RelNotes/2.35.2.txt create mode 100644 Documentation/RelNotes/2.35.3.txt create mode 100644 Documentation/RelNotes/2.35.4.txt create mode 100644 Documentation/RelNotes/2.35.5.txt create mode 100644 Documentation/RelNotes/2.35.6.txt create mode 100644 Documentation/RelNotes/2.35.7.txt create mode 100644 Documentation/RelNotes/2.35.8.txt create mode 100644 Documentation/RelNotes/2.36.0.txt create mode 100644 Documentation/RelNotes/2.36.1.txt create mode 100644 Documentation/RelNotes/2.36.2.txt create mode 100644 Documentation/RelNotes/2.36.3.txt create mode 100644 Documentation/RelNotes/2.36.4.txt create mode 100644 Documentation/RelNotes/2.36.5.txt create mode 100644 Documentation/RelNotes/2.36.6.txt create mode 100644 Documentation/RelNotes/2.37.0.txt create mode 100644 Documentation/RelNotes/2.37.1.txt create mode 100644 Documentation/RelNotes/2.37.2.txt create mode 100644 Documentation/RelNotes/2.37.3.txt create mode 100644 Documentation/RelNotes/2.37.4.txt create mode 100644 Documentation/RelNotes/2.37.5.txt create mode 100644 Documentation/RelNotes/2.37.6.txt create mode 100644 Documentation/RelNotes/2.37.7.txt create mode 100644 Documentation/RelNotes/2.38.0.txt create mode 100644 Documentation/RelNotes/2.38.1.txt create mode 100644 Documentation/RelNotes/2.38.2.txt create mode 100644 Documentation/RelNotes/2.38.3.txt create mode 100644 Documentation/RelNotes/2.38.4.txt create mode 100644 Documentation/RelNotes/2.38.5.txt create mode 100644 Documentation/RelNotes/2.39.0.txt create mode 100644 Documentation/RelNotes/2.39.1.txt create mode 100644 Documentation/RelNotes/2.39.2.txt create mode 100644 Documentation/RelNotes/2.39.3.txt create mode 100644 Documentation/RelNotes/2.39.4.txt create mode 100644 Documentation/RelNotes/2.39.5.txt create mode 100644 Documentation/RelNotes/2.4.0.txt create mode 100644 Documentation/RelNotes/2.4.1.txt create mode 100644 Documentation/RelNotes/2.4.10.txt create mode 100644 Documentation/RelNotes/2.4.11.txt create mode 100644 Documentation/RelNotes/2.4.12.txt create mode 100644 Documentation/RelNotes/2.4.2.txt create mode 100644 Documentation/RelNotes/2.4.3.txt create mode 100644 Documentation/RelNotes/2.4.4.txt create mode 100644 Documentation/RelNotes/2.4.5.txt create mode 100644 Documentation/RelNotes/2.4.6.txt create mode 100644 Documentation/RelNotes/2.4.7.txt create mode 100644 Documentation/RelNotes/2.4.8.txt create mode 100644 Documentation/RelNotes/2.4.9.txt create mode 100644 Documentation/RelNotes/2.40.0.txt create mode 100644 Documentation/RelNotes/2.40.1.txt create mode 100644 Documentation/RelNotes/2.40.2.txt create mode 100644 Documentation/RelNotes/2.40.3.txt create mode 100644 Documentation/RelNotes/2.40.4.txt create mode 100644 Documentation/RelNotes/2.41.0.txt create mode 100644 Documentation/RelNotes/2.41.1.txt create mode 100644 Documentation/RelNotes/2.41.2.txt create mode 100644 Documentation/RelNotes/2.41.3.txt create mode 100644 Documentation/RelNotes/2.42.0.txt create mode 100644 Documentation/RelNotes/2.42.1.txt create mode 100644 Documentation/RelNotes/2.42.2.txt create mode 100644 Documentation/RelNotes/2.42.3.txt create mode 100644 Documentation/RelNotes/2.42.4.txt create mode 100644 Documentation/RelNotes/2.43.0.txt create mode 100644 Documentation/RelNotes/2.43.1.txt create mode 100644 Documentation/RelNotes/2.43.2.txt create mode 100644 Documentation/RelNotes/2.43.3.txt create mode 100644 Documentation/RelNotes/2.43.4.txt create mode 100644 Documentation/RelNotes/2.43.5.txt create mode 100644 Documentation/RelNotes/2.43.6.txt create mode 100644 Documentation/RelNotes/2.44.0.txt create mode 100644 Documentation/RelNotes/2.44.1.txt create mode 100644 Documentation/RelNotes/2.44.2.txt create mode 100644 Documentation/RelNotes/2.44.3.txt create mode 100644 Documentation/RelNotes/2.45.0.txt create mode 100644 Documentation/RelNotes/2.45.1.txt create mode 100644 Documentation/RelNotes/2.45.2.txt create mode 100644 Documentation/RelNotes/2.45.3.txt create mode 100644 Documentation/RelNotes/2.46.0.txt create mode 100644 Documentation/RelNotes/2.46.1.txt create mode 100644 Documentation/RelNotes/2.46.2.txt create mode 100644 Documentation/RelNotes/2.46.3.txt create mode 100644 Documentation/RelNotes/2.47.0.txt create mode 100644 Documentation/RelNotes/2.47.1.txt create mode 100644 Documentation/RelNotes/2.47.2.txt create mode 100644 Documentation/RelNotes/2.48.0.txt create mode 100644 Documentation/RelNotes/2.48.1.txt create mode 100644 Documentation/RelNotes/2.49.0.txt create mode 100644 Documentation/RelNotes/2.5.0.txt create mode 100644 Documentation/RelNotes/2.5.1.txt create mode 100644 Documentation/RelNotes/2.5.2.txt create mode 100644 Documentation/RelNotes/2.5.3.txt create mode 100644 Documentation/RelNotes/2.5.4.txt create mode 100644 Documentation/RelNotes/2.5.5.txt create mode 100644 Documentation/RelNotes/2.5.6.txt create mode 100644 Documentation/RelNotes/2.6.0.txt create mode 100644 Documentation/RelNotes/2.6.1.txt create mode 100644 Documentation/RelNotes/2.6.2.txt create mode 100644 Documentation/RelNotes/2.6.3.txt create mode 100644 Documentation/RelNotes/2.6.4.txt create mode 100644 Documentation/RelNotes/2.6.5.txt create mode 100644 Documentation/RelNotes/2.6.6.txt create mode 100644 Documentation/RelNotes/2.6.7.txt create mode 100644 Documentation/RelNotes/2.7.0.txt create mode 100644 Documentation/RelNotes/2.7.1.txt create mode 100644 Documentation/RelNotes/2.7.2.txt create mode 100644 Documentation/RelNotes/2.7.3.txt create mode 100644 Documentation/RelNotes/2.7.4.txt create mode 100644 Documentation/RelNotes/2.7.5.txt create mode 100644 Documentation/RelNotes/2.7.6.txt create mode 100644 Documentation/RelNotes/2.8.0.txt create mode 100644 Documentation/RelNotes/2.8.1.txt create mode 100644 Documentation/RelNotes/2.8.2.txt create mode 100644 Documentation/RelNotes/2.8.3.txt create mode 100644 Documentation/RelNotes/2.8.4.txt create mode 100644 Documentation/RelNotes/2.8.5.txt create mode 100644 Documentation/RelNotes/2.8.6.txt create mode 100644 Documentation/RelNotes/2.9.0.txt create mode 100644 Documentation/RelNotes/2.9.1.txt create mode 100644 Documentation/RelNotes/2.9.2.txt create mode 100644 Documentation/RelNotes/2.9.3.txt create mode 100644 Documentation/RelNotes/2.9.4.txt create mode 100644 Documentation/RelNotes/2.9.5.txt create mode 100644 Documentation/ReviewingGuidelines.adoc create mode 100644 Documentation/SubmittingPatches create mode 100644 Documentation/ToolsForGit.adoc create mode 100644 Documentation/asciidoc.conf.in create mode 100644 Documentation/asciidoctor-extensions.rb.in create mode 100644 Documentation/blame-options.adoc create mode 100755 Documentation/build-docdep.perl create mode 100755 Documentation/cat-texi.perl create mode 100755 Documentation/cmd-list.perl create mode 100644 Documentation/config.adoc create mode 100644 Documentation/config/add.adoc create mode 100644 Documentation/config/advice.adoc create mode 100644 Documentation/config/alias.adoc create mode 100644 Documentation/config/am.adoc create mode 100644 Documentation/config/apply.adoc create mode 100644 Documentation/config/attr.adoc create mode 100644 Documentation/config/bitmap-pseudo-merge.adoc create mode 100644 Documentation/config/blame.adoc create mode 100644 Documentation/config/branch.adoc create mode 100644 Documentation/config/browser.adoc create mode 100644 Documentation/config/bundle.adoc create mode 100644 Documentation/config/checkout.adoc create mode 100644 Documentation/config/clean.adoc create mode 100644 Documentation/config/clone.adoc create mode 100644 Documentation/config/color.adoc create mode 100644 Documentation/config/column.adoc create mode 100644 Documentation/config/commit.adoc create mode 100644 Documentation/config/commitgraph.adoc create mode 100644 Documentation/config/completion.adoc create mode 100644 Documentation/config/core.adoc create mode 100644 Documentation/config/credential.adoc create mode 100644 Documentation/config/diff.adoc create mode 100644 Documentation/config/difftool.adoc create mode 100644 Documentation/config/extensions.adoc create mode 100644 Documentation/config/fastimport.adoc create mode 100644 Documentation/config/feature.adoc create mode 100644 Documentation/config/fetch.adoc create mode 100644 Documentation/config/filter.adoc create mode 100644 Documentation/config/fmt-merge-msg.adoc create mode 100644 Documentation/config/format.adoc create mode 100644 Documentation/config/fsck.adoc create mode 100644 Documentation/config/fsmonitor--daemon.adoc create mode 100644 Documentation/config/gc.adoc create mode 100644 Documentation/config/gitcvs.adoc create mode 100644 Documentation/config/gitweb.adoc create mode 100644 Documentation/config/gpg.adoc create mode 100644 Documentation/config/grep.adoc create mode 100644 Documentation/config/gui.adoc create mode 100644 Documentation/config/guitool.adoc create mode 100644 Documentation/config/help.adoc create mode 100644 Documentation/config/http.adoc create mode 100644 Documentation/config/i18n.adoc create mode 100644 Documentation/config/imap.adoc create mode 100644 Documentation/config/includeif.adoc create mode 100644 Documentation/config/index.adoc create mode 100644 Documentation/config/init.adoc create mode 100644 Documentation/config/instaweb.adoc create mode 100644 Documentation/config/interactive.adoc create mode 100644 Documentation/config/log.adoc create mode 100644 Documentation/config/lsrefs.adoc create mode 100644 Documentation/config/mailinfo.adoc create mode 100644 Documentation/config/mailmap.adoc create mode 100644 Documentation/config/maintenance.adoc create mode 100644 Documentation/config/man.adoc create mode 100644 Documentation/config/merge.adoc create mode 100644 Documentation/config/mergetool.adoc create mode 100644 Documentation/config/notes.adoc create mode 100644 Documentation/config/pack.adoc create mode 100644 Documentation/config/pager.adoc create mode 100644 Documentation/config/pretty.adoc create mode 100644 Documentation/config/promisor.adoc create mode 100644 Documentation/config/protocol.adoc create mode 100644 Documentation/config/pull.adoc create mode 100644 Documentation/config/push.adoc create mode 100644 Documentation/config/rebase.adoc create mode 100644 Documentation/config/receive.adoc create mode 100644 Documentation/config/reftable.adoc create mode 100644 Documentation/config/remote.adoc create mode 100644 Documentation/config/remotes.adoc create mode 100644 Documentation/config/repack.adoc create mode 100644 Documentation/config/rerere.adoc create mode 100644 Documentation/config/revert.adoc create mode 100644 Documentation/config/safe.adoc create mode 100644 Documentation/config/sendemail.adoc create mode 100644 Documentation/config/sequencer.adoc create mode 100644 Documentation/config/showbranch.adoc create mode 100644 Documentation/config/sparse.adoc create mode 100644 Documentation/config/splitindex.adoc create mode 100644 Documentation/config/ssh.adoc create mode 100644 Documentation/config/stash.adoc create mode 100644 Documentation/config/status.adoc create mode 100644 Documentation/config/submodule.adoc create mode 100644 Documentation/config/tag.adoc create mode 100644 Documentation/config/tar.adoc create mode 100644 Documentation/config/trace2.adoc create mode 100644 Documentation/config/transfer.adoc create mode 100644 Documentation/config/uploadarchive.adoc create mode 100644 Documentation/config/uploadpack.adoc create mode 100644 Documentation/config/url.adoc create mode 100644 Documentation/config/user.adoc create mode 100644 Documentation/config/versionsort.adoc create mode 100644 Documentation/config/web.adoc create mode 100644 Documentation/config/worktree.adoc create mode 100644 Documentation/date-formats.adoc create mode 100644 Documentation/diff-format.adoc create mode 100644 Documentation/diff-generate-patch.adoc create mode 100644 Documentation/diff-options.adoc create mode 100755 Documentation/doc-diff create mode 100644 Documentation/docbook-xsl.css create mode 100644 Documentation/docbook.xsl create mode 100644 Documentation/docinfo-html.in create mode 100644 Documentation/everyday.txto create mode 100644 Documentation/fetch-options.adoc create mode 100755 Documentation/fix-texi.perl create mode 100644 Documentation/fsck-msgids.adoc create mode 100755 Documentation/generate-mergetool-list.sh create mode 100644 Documentation/git-add.adoc create mode 100644 Documentation/git-am.adoc create mode 100644 Documentation/git-annotate.adoc create mode 100644 Documentation/git-apply.adoc create mode 100644 Documentation/git-archimport.adoc create mode 100644 Documentation/git-archive.adoc create mode 100644 Documentation/git-bisect-lk2009.adoc create mode 100644 Documentation/git-bisect.adoc create mode 100644 Documentation/git-blame.adoc create mode 100644 Documentation/git-branch.adoc create mode 100644 Documentation/git-bugreport.adoc create mode 100644 Documentation/git-bundle.adoc create mode 100644 Documentation/git-cat-file.adoc create mode 100644 Documentation/git-check-attr.adoc create mode 100644 Documentation/git-check-ignore.adoc create mode 100644 Documentation/git-check-mailmap.adoc create mode 100644 Documentation/git-check-ref-format.adoc create mode 100644 Documentation/git-checkout-index.adoc create mode 100644 Documentation/git-checkout.adoc create mode 100644 Documentation/git-cherry-pick.adoc create mode 100644 Documentation/git-cherry.adoc create mode 100644 Documentation/git-citool.adoc create mode 100644 Documentation/git-clean.adoc create mode 100644 Documentation/git-clone.adoc create mode 100644 Documentation/git-column.adoc create mode 100644 Documentation/git-commit-graph.adoc create mode 100644 Documentation/git-commit-tree.adoc create mode 100644 Documentation/git-commit.adoc create mode 100644 Documentation/git-config.adoc create mode 100644 Documentation/git-count-objects.adoc create mode 100644 Documentation/git-credential-cache--daemon.adoc create mode 100644 Documentation/git-credential-cache.adoc create mode 100644 Documentation/git-credential-store.adoc create mode 100644 Documentation/git-credential.adoc create mode 100644 Documentation/git-cvsexportcommit.adoc create mode 100644 Documentation/git-cvsimport.adoc create mode 100644 Documentation/git-cvsserver.adoc create mode 100644 Documentation/git-daemon.adoc create mode 100644 Documentation/git-describe.adoc create mode 100644 Documentation/git-diagnose.adoc create mode 100644 Documentation/git-diff-files.adoc create mode 100644 Documentation/git-diff-index.adoc create mode 100644 Documentation/git-diff-tree.adoc create mode 100644 Documentation/git-diff.adoc create mode 100644 Documentation/git-difftool.adoc create mode 100644 Documentation/git-fast-export.adoc create mode 100644 Documentation/git-fast-import.adoc create mode 100644 Documentation/git-fetch-pack.adoc create mode 100644 Documentation/git-fetch.adoc create mode 100644 Documentation/git-filter-branch.adoc create mode 100644 Documentation/git-fmt-merge-msg.adoc create mode 100644 Documentation/git-for-each-ref.adoc create mode 100644 Documentation/git-for-each-repo.adoc create mode 100644 Documentation/git-format-patch.adoc create mode 100644 Documentation/git-fsck-objects.adoc create mode 100644 Documentation/git-fsck.adoc create mode 100644 Documentation/git-fsmonitor--daemon.adoc create mode 100644 Documentation/git-gc.adoc create mode 100644 Documentation/git-get-tar-commit-id.adoc create mode 100644 Documentation/git-grep.adoc create mode 100644 Documentation/git-gui.adoc create mode 100644 Documentation/git-hash-object.adoc create mode 100644 Documentation/git-help.adoc create mode 100644 Documentation/git-hook.adoc create mode 100644 Documentation/git-http-backend.adoc create mode 100644 Documentation/git-http-fetch.adoc create mode 100644 Documentation/git-http-push.adoc create mode 100644 Documentation/git-imap-send.adoc create mode 100644 Documentation/git-index-pack.adoc create mode 100644 Documentation/git-init-db.adoc create mode 100644 Documentation/git-init.adoc create mode 100644 Documentation/git-instaweb.adoc create mode 100644 Documentation/git-interpret-trailers.adoc create mode 100644 Documentation/git-log.adoc create mode 100644 Documentation/git-ls-files.adoc create mode 100644 Documentation/git-ls-remote.adoc create mode 100644 Documentation/git-ls-tree.adoc create mode 100644 Documentation/git-mailinfo.adoc create mode 100644 Documentation/git-mailsplit.adoc create mode 100644 Documentation/git-maintenance.adoc create mode 100644 Documentation/git-merge-base.adoc create mode 100644 Documentation/git-merge-file.adoc create mode 100644 Documentation/git-merge-index.adoc create mode 100644 Documentation/git-merge-one-file.adoc create mode 100644 Documentation/git-merge-tree.adoc create mode 100644 Documentation/git-merge.adoc create mode 100644 Documentation/git-mergetool--lib.adoc create mode 100644 Documentation/git-mergetool.adoc create mode 100644 Documentation/git-mktag.adoc create mode 100644 Documentation/git-mktree.adoc create mode 100644 Documentation/git-multi-pack-index.adoc create mode 100644 Documentation/git-mv.adoc create mode 100644 Documentation/git-name-rev.adoc create mode 100644 Documentation/git-notes.adoc create mode 100644 Documentation/git-p4.adoc create mode 100644 Documentation/git-pack-objects.adoc create mode 100644 Documentation/git-pack-redundant.adoc create mode 100644 Documentation/git-pack-refs.adoc create mode 100644 Documentation/git-patch-id.adoc create mode 100644 Documentation/git-prune-packed.adoc create mode 100644 Documentation/git-prune.adoc create mode 100644 Documentation/git-pull.adoc create mode 100644 Documentation/git-push.adoc create mode 100644 Documentation/git-quiltimport.adoc create mode 100644 Documentation/git-range-diff.adoc create mode 100644 Documentation/git-read-tree.adoc create mode 100644 Documentation/git-rebase.adoc create mode 100644 Documentation/git-receive-pack.adoc create mode 100644 Documentation/git-reflog.adoc create mode 100644 Documentation/git-refs.adoc create mode 100644 Documentation/git-remote-ext.adoc create mode 100644 Documentation/git-remote-fd.adoc create mode 100644 Documentation/git-remote-helpers.txto create mode 100644 Documentation/git-remote.adoc create mode 100644 Documentation/git-repack.adoc create mode 100644 Documentation/git-replace.adoc create mode 100644 Documentation/git-replay.adoc create mode 100644 Documentation/git-request-pull.adoc create mode 100644 Documentation/git-rerere.adoc create mode 100644 Documentation/git-reset.adoc create mode 100644 Documentation/git-restore.adoc create mode 100644 Documentation/git-rev-list.adoc create mode 100644 Documentation/git-rev-parse.adoc create mode 100644 Documentation/git-revert.adoc create mode 100644 Documentation/git-rm.adoc create mode 100644 Documentation/git-send-email.adoc create mode 100644 Documentation/git-send-pack.adoc create mode 100644 Documentation/git-sh-i18n--envsubst.adoc create mode 100644 Documentation/git-sh-i18n.adoc create mode 100644 Documentation/git-sh-setup.adoc create mode 100644 Documentation/git-shell.adoc create mode 100644 Documentation/git-shortlog.adoc create mode 100644 Documentation/git-show-branch.adoc create mode 100644 Documentation/git-show-index.adoc create mode 100644 Documentation/git-show-ref.adoc create mode 100644 Documentation/git-show.adoc create mode 100644 Documentation/git-sparse-checkout.adoc create mode 100644 Documentation/git-stage.adoc create mode 100644 Documentation/git-stash.adoc create mode 100644 Documentation/git-status.adoc create mode 100644 Documentation/git-stripspace.adoc create mode 100644 Documentation/git-submodule.adoc create mode 100644 Documentation/git-svn.adoc create mode 100644 Documentation/git-switch.adoc create mode 100644 Documentation/git-symbolic-ref.adoc create mode 100644 Documentation/git-tag.adoc create mode 100644 Documentation/git-tools.adoc create mode 100644 Documentation/git-unpack-file.adoc create mode 100644 Documentation/git-unpack-objects.adoc create mode 100644 Documentation/git-update-index.adoc create mode 100644 Documentation/git-update-ref.adoc create mode 100644 Documentation/git-update-server-info.adoc create mode 100644 Documentation/git-upload-archive.adoc create mode 100644 Documentation/git-upload-pack.adoc create mode 100644 Documentation/git-var.adoc create mode 100644 Documentation/git-verify-commit.adoc create mode 100644 Documentation/git-verify-pack.adoc create mode 100644 Documentation/git-verify-tag.adoc create mode 100644 Documentation/git-version.adoc create mode 100644 Documentation/git-web--browse.adoc create mode 100644 Documentation/git-whatchanged.adoc create mode 100644 Documentation/git-worktree.adoc create mode 100644 Documentation/git-write-tree.adoc create mode 100644 Documentation/git.adoc create mode 100644 Documentation/gitattributes.adoc create mode 100644 Documentation/gitcli.adoc create mode 100644 Documentation/gitcore-tutorial.adoc create mode 100644 Documentation/gitcredentials.adoc create mode 100644 Documentation/gitcvs-migration.adoc create mode 100644 Documentation/gitdiffcore.adoc create mode 100644 Documentation/giteveryday.adoc create mode 100644 Documentation/gitfaq.adoc create mode 100644 Documentation/gitformat-bundle.adoc create mode 100644 Documentation/gitformat-chunk.adoc create mode 100644 Documentation/gitformat-commit-graph.adoc create mode 100644 Documentation/gitformat-index.adoc create mode 100644 Documentation/gitformat-pack.adoc create mode 100644 Documentation/gitformat-signature.adoc create mode 100644 Documentation/gitglossary.adoc create mode 100644 Documentation/githooks.adoc create mode 100644 Documentation/gitignore.adoc create mode 100644 Documentation/gitk.adoc create mode 100644 Documentation/gitmailmap.adoc create mode 100644 Documentation/gitmodules.adoc create mode 100644 Documentation/gitnamespaces.adoc create mode 100644 Documentation/gitpacking.adoc create mode 100644 Documentation/gitprotocol-capabilities.adoc create mode 100644 Documentation/gitprotocol-common.adoc create mode 100644 Documentation/gitprotocol-http.adoc create mode 100644 Documentation/gitprotocol-pack.adoc create mode 100644 Documentation/gitprotocol-v2.adoc create mode 100644 Documentation/gitremote-helpers.adoc create mode 100644 Documentation/gitrepository-layout.adoc create mode 100644 Documentation/gitrevisions.adoc create mode 100644 Documentation/gitsubmodules.adoc create mode 100644 Documentation/gittutorial-2.adoc create mode 100644 Documentation/gittutorial.adoc create mode 100644 Documentation/gitweb.adoc create mode 100644 Documentation/gitweb.conf.adoc create mode 100644 Documentation/gitworkflows.adoc create mode 100644 Documentation/glossary-content.adoc create mode 100644 Documentation/howto-index.adoc create mode 100644 Documentation/howto/coordinate-embargoed-releases.adoc create mode 100755 Documentation/howto/howto-index.sh create mode 100644 Documentation/howto/keep-canonical-history-correct.adoc create mode 100644 Documentation/howto/maintain-git.adoc create mode 100644 Documentation/howto/meson.build create mode 100644 Documentation/howto/new-command.adoc create mode 100644 Documentation/howto/rebase-from-internal-branch.adoc create mode 100644 Documentation/howto/rebuild-from-update-hook.adoc create mode 100644 Documentation/howto/recover-corrupted-blob-object.adoc create mode 100644 Documentation/howto/recover-corrupted-object-harder.adoc create mode 100644 Documentation/howto/revert-a-faulty-merge.adoc create mode 100644 Documentation/howto/revert-branch-rebase.adoc create mode 100644 Documentation/howto/separating-topic-branches.adoc create mode 100644 Documentation/howto/setup-git-server-over-http.adoc create mode 100644 Documentation/howto/update-hook-example.adoc create mode 100644 Documentation/howto/use-git-daemon.adoc create mode 100644 Documentation/howto/using-merge-subtree.adoc create mode 100644 Documentation/howto/using-signed-tag-in-pull-request.adoc create mode 100644 Documentation/i18n.adoc create mode 100644 Documentation/includes/cmd-config-section-all.txt create mode 100644 Documentation/includes/cmd-config-section-rest.txt create mode 100755 Documentation/install-doc-quick.sh create mode 100755 Documentation/install-webdoc.sh create mode 100644 Documentation/line-range-format.adoc create mode 100644 Documentation/line-range-options.adoc create mode 100755 Documentation/lint-fsck-msgids.perl create mode 100755 Documentation/lint-gitlink.perl create mode 100755 Documentation/lint-man-end-blurb.perl create mode 100755 Documentation/lint-man-section-order.perl create mode 100755 Documentation/lint-manpages.sh create mode 100644 Documentation/manpage-bold-literal.xsl create mode 100644 Documentation/manpage-normal.xsl create mode 100644 Documentation/manpage.xsl create mode 100644 Documentation/merge-options.adoc create mode 100644 Documentation/merge-strategies.adoc create mode 100644 Documentation/mergetools/vimdiff.txt create mode 100644 Documentation/meson.build create mode 100644 Documentation/object-format-disclaimer.adoc create mode 100644 Documentation/pretty-formats.adoc create mode 100644 Documentation/pretty-options.adoc create mode 100644 Documentation/pull-fetch-param.adoc create mode 100644 Documentation/ref-reachability-filters.adoc create mode 100644 Documentation/ref-storage-format.adoc create mode 100644 Documentation/rerere-options.adoc create mode 100644 Documentation/rev-list-description.adoc create mode 100644 Documentation/rev-list-options.adoc create mode 100644 Documentation/revisions.adoc create mode 100644 Documentation/scalar.adoc create mode 100644 Documentation/sequencer.adoc create mode 100644 Documentation/signoff-option.adoc create mode 100644 Documentation/technical/.gitignore create mode 100644 Documentation/technical/api-error-handling.adoc create mode 100644 Documentation/technical/api-index-skel.adoc create mode 100755 Documentation/technical/api-index.sh create mode 100644 Documentation/technical/api-merge.adoc create mode 100644 Documentation/technical/api-parse-options.adoc create mode 100644 Documentation/technical/api-path-walk.adoc create mode 100644 Documentation/technical/api-simple-ipc.adoc create mode 100644 Documentation/technical/api-trace2.adoc create mode 100644 Documentation/technical/bitmap-format.adoc create mode 100644 Documentation/technical/build-systems.adoc create mode 100644 Documentation/technical/bundle-uri.adoc create mode 100644 Documentation/technical/commit-graph.adoc create mode 100644 Documentation/technical/directory-rename-detection.adoc create mode 100644 Documentation/technical/hash-function-transition.adoc create mode 100644 Documentation/technical/long-running-process-protocol.adoc create mode 100644 Documentation/technical/meson.build create mode 100644 Documentation/technical/multi-pack-index.adoc create mode 100644 Documentation/technical/pack-heuristics.adoc create mode 100644 Documentation/technical/packfile-uri.adoc create mode 100644 Documentation/technical/parallel-checkout.adoc create mode 100644 Documentation/technical/partial-clone.adoc create mode 100644 Documentation/technical/platform-support.adoc create mode 100644 Documentation/technical/racy-git.adoc create mode 100644 Documentation/technical/reftable.adoc create mode 100644 Documentation/technical/remembering-renames.adoc create mode 100644 Documentation/technical/repository-version.adoc create mode 100644 Documentation/technical/rerere.adoc create mode 100644 Documentation/technical/scalar.adoc create mode 100644 Documentation/technical/send-pack-pipeline.adoc create mode 100644 Documentation/technical/shallow.adoc create mode 100644 Documentation/technical/sparse-checkout.adoc create mode 100644 Documentation/technical/sparse-index.adoc create mode 100644 Documentation/technical/trivial-merge.adoc create mode 100644 Documentation/technical/unit-tests.adoc create mode 100644 Documentation/texi.xsl create mode 100644 Documentation/trace2-target-values.adoc create mode 100644 Documentation/transfer-data-leaks.adoc create mode 100644 Documentation/urls-remotes.adoc create mode 100644 Documentation/urls.adoc create mode 100644 Documentation/user-manual.adoc create mode 100644 GIT-BUILD-OPTIONS.in create mode 100644 GIT-VERSION-FILE.in create mode 100755 GIT-VERSION-GEN create mode 100644 INSTALL create mode 100644 LGPL-2.1 create mode 100644 Makefile create mode 100644 README.md create mode 120000 RelNotes create mode 100644 SECURITY.md create mode 100644 abspath.c create mode 100644 abspath.h create mode 100644 aclocal.m4 create mode 100644 add-interactive.c create mode 100644 add-interactive.h create mode 100644 add-patch.c create mode 100644 advice.c create mode 100644 advice.h create mode 100644 alias.c create mode 100644 alias.h create mode 100644 alloc.c create mode 100644 alloc.h create mode 100644 apply.c create mode 100644 apply.h create mode 100644 archive-tar.c create mode 100644 archive-zip.c create mode 100644 archive.c create mode 100644 archive.h create mode 100644 attr.c create mode 100644 attr.h create mode 100644 banned.h create mode 100644 base85.c create mode 100644 base85.h create mode 100644 bin-wrappers/.gitignore create mode 100644 bin-wrappers/meson.build create mode 100755 bin-wrappers/wrap-for-bin.sh create mode 100644 bisect.c create mode 100644 bisect.h create mode 100644 blame.c create mode 100644 blame.h create mode 100644 blob.c create mode 100644 blob.h create mode 100644 block-sha1/sha1.c create mode 100644 block-sha1/sha1.h create mode 100644 bloom.c create mode 100644 bloom.h create mode 100644 branch.c create mode 100644 branch.h create mode 100644 builtin.h create mode 100644 builtin/add.c create mode 100644 builtin/am.c create mode 100644 builtin/annotate.c create mode 100644 builtin/apply.c create mode 100644 builtin/archive.c create mode 100644 builtin/bisect.c create mode 100644 builtin/blame.c create mode 100644 builtin/branch.c create mode 100644 builtin/bugreport.c create mode 100644 builtin/bundle.c create mode 100644 builtin/cat-file.c create mode 100644 builtin/check-attr.c create mode 100644 builtin/check-ignore.c create mode 100644 builtin/check-mailmap.c create mode 100644 builtin/check-ref-format.c create mode 100644 builtin/checkout--worker.c create mode 100644 builtin/checkout-index.c create mode 100644 builtin/checkout.c create mode 100644 builtin/clean.c create mode 100644 builtin/clone.c create mode 100644 builtin/column.c create mode 100644 builtin/commit-graph.c create mode 100644 builtin/commit-tree.c create mode 100644 builtin/commit.c create mode 100644 builtin/config.c create mode 100644 builtin/count-objects.c create mode 100644 builtin/credential-cache--daemon.c create mode 100644 builtin/credential-cache.c create mode 100644 builtin/credential-store.c create mode 100644 builtin/credential.c create mode 100644 builtin/describe.c create mode 100644 builtin/diagnose.c create mode 100644 builtin/diff-files.c create mode 100644 builtin/diff-index.c create mode 100644 builtin/diff-tree.c create mode 100644 builtin/diff.c create mode 100644 builtin/difftool.c create mode 100644 builtin/fast-export.c create mode 100644 builtin/fast-import.c create mode 100644 builtin/fetch-pack.c create mode 100644 builtin/fetch.c create mode 100644 builtin/fmt-merge-msg.c create mode 100644 builtin/for-each-ref.c create mode 100644 builtin/for-each-repo.c create mode 100644 builtin/fsck.c create mode 100644 builtin/fsmonitor--daemon.c create mode 100644 builtin/gc.c create mode 100644 builtin/get-tar-commit-id.c create mode 100644 builtin/grep.c create mode 100644 builtin/hash-object.c create mode 100644 builtin/help.c create mode 100644 builtin/hook.c create mode 100644 builtin/index-pack.c create mode 100644 builtin/init-db.c create mode 100644 builtin/interpret-trailers.c create mode 100644 builtin/log.c create mode 100644 builtin/ls-files.c create mode 100644 builtin/ls-remote.c create mode 100644 builtin/ls-tree.c create mode 100644 builtin/mailinfo.c create mode 100644 builtin/mailsplit.c create mode 100644 builtin/merge-base.c create mode 100644 builtin/merge-file.c create mode 100644 builtin/merge-index.c create mode 100644 builtin/merge-ours.c create mode 100644 builtin/merge-recursive.c create mode 100644 builtin/merge-tree.c create mode 100644 builtin/merge.c create mode 100644 builtin/mktag.c create mode 100644 builtin/mktree.c create mode 100644 builtin/multi-pack-index.c create mode 100644 builtin/mv.c create mode 100644 builtin/name-rev.c create mode 100644 builtin/notes.c create mode 100644 builtin/pack-objects.c create mode 100644 builtin/pack-redundant.c create mode 100644 builtin/pack-refs.c create mode 100644 builtin/patch-id.c create mode 100644 builtin/prune-packed.c create mode 100644 builtin/prune.c create mode 100644 builtin/pull.c create mode 100644 builtin/push.c create mode 100644 builtin/range-diff.c create mode 100644 builtin/read-tree.c create mode 100644 builtin/rebase.c create mode 100644 builtin/receive-pack.c create mode 100644 builtin/reflog.c create mode 100644 builtin/refs.c create mode 100644 builtin/remote-ext.c create mode 100644 builtin/remote-fd.c create mode 100644 builtin/remote.c create mode 100644 builtin/repack.c create mode 100644 builtin/replace.c create mode 100644 builtin/replay.c create mode 100644 builtin/rerere.c create mode 100644 builtin/reset.c create mode 100644 builtin/rev-list.c create mode 100644 builtin/rev-parse.c create mode 100644 builtin/revert.c create mode 100644 builtin/rm.c create mode 100644 builtin/send-pack.c create mode 100644 builtin/shortlog.c create mode 100644 builtin/show-branch.c create mode 100644 builtin/show-index.c create mode 100644 builtin/show-ref.c create mode 100644 builtin/sparse-checkout.c create mode 100644 builtin/stash.c create mode 100644 builtin/stripspace.c create mode 100644 builtin/submodule--helper.c create mode 100644 builtin/symbolic-ref.c create mode 100644 builtin/tag.c create mode 100644 builtin/unpack-file.c create mode 100644 builtin/unpack-objects.c create mode 100644 builtin/update-index.c create mode 100644 builtin/update-ref.c create mode 100644 builtin/update-server-info.c create mode 100644 builtin/upload-archive.c create mode 100644 builtin/upload-pack.c create mode 100644 builtin/var.c create mode 100644 builtin/verify-commit.c create mode 100644 builtin/verify-pack.c create mode 100644 builtin/verify-tag.c create mode 100644 builtin/worktree.c create mode 100644 builtin/write-tree.c create mode 100644 bulk-checkin.c create mode 100644 bulk-checkin.h create mode 100644 bundle-uri.c create mode 100644 bundle-uri.h create mode 100644 bundle.c create mode 100644 bundle.h create mode 100644 cache-tree.c create mode 100644 cache-tree.h create mode 100644 cbtree.c create mode 100644 cbtree.h create mode 100644 chdir-notify.c create mode 100644 chdir-notify.h create mode 100755 check-builtins.sh create mode 100644 checkout.c create mode 100644 checkout.h create mode 100644 chunk-format.c create mode 100644 chunk-format.h create mode 100755 ci/check-directional-formatting.bash create mode 100755 ci/check-whitespace.sh create mode 100644 ci/config/README create mode 100755 ci/install-dependencies.sh create mode 100755 ci/install-sdk.ps1 create mode 100755 ci/lib.sh create mode 100755 ci/make-test-artifacts.sh create mode 100755 ci/mount-fileshare.sh create mode 100755 ci/print-test-failures.sh create mode 100755 ci/run-build-and-minimal-fuzzers.sh create mode 100755 ci/run-build-and-tests.sh create mode 100755 ci/run-static-analysis.sh create mode 100755 ci/run-style-check.sh create mode 100755 ci/run-test-slice.sh create mode 100755 ci/test-documentation.sh create mode 100755 ci/util/extract-trash-dirs.sh create mode 100644 color.c create mode 100644 color.h create mode 100644 column.c create mode 100644 column.h create mode 100644 combine-diff.c create mode 100644 command-list.txt create mode 100644 commit-graph.c create mode 100644 commit-graph.h create mode 100644 commit-reach.c create mode 100644 commit-reach.h create mode 100644 commit-slab-decl.h create mode 100644 commit-slab-impl.h create mode 100644 commit-slab.h create mode 100644 commit.c create mode 100644 commit.h create mode 100644 common-main.c create mode 100644 compat/.gitattributes create mode 100644 compat/access.c create mode 100644 compat/apple-common-crypto.h create mode 100644 compat/basename.c create mode 100644 compat/bswap.h create mode 100644 compat/compiler.h create mode 100644 compat/disk.h create mode 100644 compat/fileno.c create mode 100644 compat/fopen.c create mode 100644 compat/fsmonitor/fsm-darwin-gcc.h create mode 100644 compat/fsmonitor/fsm-health-darwin.c create mode 100644 compat/fsmonitor/fsm-health-win32.c create mode 100644 compat/fsmonitor/fsm-health.h create mode 100644 compat/fsmonitor/fsm-ipc-darwin.c create mode 100644 compat/fsmonitor/fsm-ipc-win32.c create mode 100644 compat/fsmonitor/fsm-listen-darwin.c create mode 100644 compat/fsmonitor/fsm-listen-win32.c create mode 100644 compat/fsmonitor/fsm-listen.h create mode 100644 compat/fsmonitor/fsm-path-utils-darwin.c create mode 100644 compat/fsmonitor/fsm-path-utils-win32.c create mode 100644 compat/fsmonitor/fsm-settings-darwin.c create mode 100644 compat/fsmonitor/fsm-settings-win32.c create mode 100644 compat/hstrerror.c create mode 100644 compat/inet_ntop.c create mode 100644 compat/inet_pton.c create mode 100644 compat/linux/procinfo.c create mode 100644 compat/memmem.c create mode 100644 compat/mingw.c create mode 100644 compat/mingw.h create mode 100644 compat/mkdir.c create mode 100644 compat/mkdtemp.c create mode 100644 compat/mmap.c create mode 100644 compat/msvc.c create mode 100644 compat/msvc.h create mode 100644 compat/nedmalloc/License.txt create mode 100644 compat/nedmalloc/Readme.txt create mode 100644 compat/nedmalloc/malloc.c.h create mode 100644 compat/nedmalloc/nedmalloc.c create mode 100644 compat/nedmalloc/nedmalloc.h create mode 100644 compat/nonblock.c create mode 100644 compat/nonblock.h create mode 100644 compat/obstack.c create mode 100644 compat/obstack.h create mode 100644 compat/open.c create mode 100644 compat/poll/poll.c create mode 100644 compat/poll/poll.h create mode 100644 compat/pread.c create mode 100644 compat/precompose_utf8.c create mode 100644 compat/precompose_utf8.h create mode 100644 compat/qsort_s.c create mode 100644 compat/regcomp_enhanced.c create mode 100644 compat/regex/regcomp.c create mode 100644 compat/regex/regex.c create mode 100644 compat/regex/regex.h create mode 100644 compat/regex/regex_internal.c create mode 100644 compat/regex/regex_internal.h create mode 100644 compat/regex/regexec.c create mode 100644 compat/setenv.c create mode 100644 compat/sha1-chunked.c create mode 100644 compat/sha1-chunked.h create mode 100644 compat/simple-ipc/ipc-shared.c create mode 100644 compat/simple-ipc/ipc-unix-socket.c create mode 100644 compat/simple-ipc/ipc-win32.c create mode 100644 compat/snprintf.c create mode 100644 compat/stat.c create mode 100644 compat/strcasestr.c create mode 100644 compat/strdup.c create mode 100644 compat/strlcpy.c create mode 100644 compat/strtoimax.c create mode 100644 compat/strtoumax.c create mode 100644 compat/stub/procinfo.c create mode 100644 compat/terminal.c create mode 100644 compat/terminal.h create mode 100644 compat/unsetenv.c create mode 100644 compat/vcbuild/.gitignore create mode 100644 compat/vcbuild/README create mode 100644 compat/vcbuild/find_vs_env.bat create mode 100644 compat/vcbuild/include/sys/param.h create mode 100644 compat/vcbuild/include/sys/time.h create mode 100644 compat/vcbuild/include/sys/utime.h create mode 100644 compat/vcbuild/include/unistd.h create mode 100644 compat/vcbuild/include/utime.h create mode 100755 compat/vcbuild/scripts/clink.pl create mode 100755 compat/vcbuild/scripts/lib.pl create mode 100644 compat/vcbuild/vcpkg_copy_dlls.bat create mode 100644 compat/vcbuild/vcpkg_install.bat create mode 100644 compat/win32.h create mode 100644 compat/win32/alloca.h create mode 100644 compat/win32/dirent.c create mode 100644 compat/win32/dirent.h create mode 100644 compat/win32/flush.c create mode 100644 compat/win32/git.manifest create mode 100644 compat/win32/headless.c create mode 100644 compat/win32/lazyload.h create mode 100644 compat/win32/path-utils.c create mode 100644 compat/win32/path-utils.h create mode 100644 compat/win32/pthread.c create mode 100644 compat/win32/pthread.h create mode 100644 compat/win32/syslog.c create mode 100644 compat/win32/syslog.h create mode 100644 compat/win32/trace2_win32_process_info.c create mode 100644 compat/win32mmap.c create mode 100644 compat/winansi.c create mode 100644 compat/zlib-uncompress2.c create mode 100644 config.c create mode 100644 config.h create mode 100644 config.mak.dev create mode 100644 config.mak.in create mode 100644 config.mak.uname create mode 100644 configure.ac create mode 100644 connect.c create mode 100644 connect.h create mode 100644 connected.c create mode 100644 connected.h create mode 100644 contrib/README create mode 100644 contrib/buildsystems/CMakeLists.txt create mode 100644 contrib/buildsystems/Generators.pm create mode 100644 contrib/buildsystems/Generators/QMake.pm create mode 100644 contrib/buildsystems/Generators/Vcproj.pm create mode 100644 contrib/buildsystems/Generators/Vcxproj.pm create mode 100755 contrib/buildsystems/engine.pl create mode 100755 contrib/buildsystems/generate create mode 100644 contrib/buildsystems/git-version.in create mode 100755 contrib/buildsystems/parse.pl create mode 100644 contrib/coccinelle/.gitignore create mode 100644 contrib/coccinelle/README create mode 100644 contrib/coccinelle/array.cocci create mode 100644 contrib/coccinelle/commit.cocci create mode 100644 contrib/coccinelle/config_fn_ctx.pending.cocci create mode 100644 contrib/coccinelle/equals-null.cocci create mode 100644 contrib/coccinelle/flex_alloc.cocci create mode 100644 contrib/coccinelle/free.cocci create mode 100644 contrib/coccinelle/git_config_number.cocci create mode 100644 contrib/coccinelle/hashmap.cocci create mode 100644 contrib/coccinelle/index-compatibility.cocci create mode 100644 contrib/coccinelle/object_id.cocci create mode 100644 contrib/coccinelle/preincr.cocci create mode 100644 contrib/coccinelle/qsort.cocci create mode 100644 contrib/coccinelle/refs.cocci create mode 100755 contrib/coccinelle/spatchcache create mode 100644 contrib/coccinelle/strbuf.cocci create mode 100644 contrib/coccinelle/swap.cocci create mode 100644 contrib/coccinelle/tests/free.c create mode 100644 contrib/coccinelle/tests/free.res create mode 100644 contrib/coccinelle/the_repository.cocci create mode 100644 contrib/coccinelle/xcalloc.cocci create mode 100644 contrib/coccinelle/xopen.cocci create mode 100644 contrib/coccinelle/xstrdup_or_null.cocci create mode 100644 contrib/coccinelle/xstrncmpz.cocci create mode 100644 contrib/completion/.gitattributes create mode 100644 contrib/completion/git-completion.bash create mode 100644 contrib/completion/git-completion.tcsh create mode 100644 contrib/completion/git-completion.zsh create mode 100644 contrib/completion/git-prompt.sh create mode 100644 contrib/completion/meson.build create mode 100644 contrib/contacts/.gitignore create mode 100644 contrib/contacts/Makefile create mode 100755 contrib/contacts/git-contacts create mode 100644 contrib/contacts/git-contacts.txt create mode 100755 contrib/coverage-diff.sh create mode 100644 contrib/credential/libsecret/.gitignore create mode 100644 contrib/credential/libsecret/Makefile create mode 100644 contrib/credential/libsecret/git-credential-libsecret.c create mode 100644 contrib/credential/netrc/.gitignore create mode 100644 contrib/credential/netrc/Makefile create mode 100755 contrib/credential/netrc/git-credential-netrc.perl create mode 100755 contrib/credential/netrc/t-git-credential-netrc.sh create mode 100755 contrib/credential/netrc/test.command-option-gpg create mode 100755 contrib/credential/netrc/test.git-config-gpg create mode 100644 contrib/credential/netrc/test.netrc create mode 100644 contrib/credential/netrc/test.netrc.gpg create mode 100755 contrib/credential/netrc/test.pl create mode 100644 contrib/credential/osxkeychain/.gitignore create mode 100644 contrib/credential/osxkeychain/Makefile create mode 100644 contrib/credential/osxkeychain/git-credential-osxkeychain.c create mode 100644 contrib/credential/wincred/Makefile create mode 100644 contrib/credential/wincred/git-credential-wincred.c create mode 100644 contrib/diff-highlight/.gitignore create mode 100644 contrib/diff-highlight/DiffHighlight.pm create mode 100644 contrib/diff-highlight/Makefile create mode 100644 contrib/diff-highlight/README create mode 100644 contrib/diff-highlight/diff-highlight.perl create mode 100644 contrib/diff-highlight/t/.gitignore create mode 100644 contrib/diff-highlight/t/Makefile create mode 100755 contrib/diff-highlight/t/t9400-diff-highlight.sh create mode 100644 contrib/emacs/README create mode 100644 contrib/emacs/git-blame.el create mode 100644 contrib/emacs/git.el create mode 100644 contrib/examples/README create mode 100755 contrib/fast-import/git-import.perl create mode 100755 contrib/fast-import/git-import.sh create mode 100644 contrib/fast-import/git-p4.README create mode 100755 contrib/fast-import/import-directories.perl create mode 100755 contrib/fast-import/import-tars.perl create mode 100755 contrib/fast-import/import-zips.py create mode 100644 contrib/git-jump/README create mode 100755 contrib/git-jump/git-jump create mode 100755 contrib/git-resurrect.sh create mode 100644 contrib/git-shell-commands/README create mode 100755 contrib/git-shell-commands/help create mode 100755 contrib/git-shell-commands/list create mode 100644 contrib/hooks/multimail/README.Git create mode 100755 contrib/hooks/post-receive-email create mode 100755 contrib/hooks/pre-auto-gc-battery create mode 100755 contrib/hooks/setgitperms.perl create mode 100755 contrib/hooks/update-paranoid create mode 100755 contrib/long-running-filter/example.pl create mode 100644 contrib/meson.build create mode 100644 contrib/mw-to-git/.gitignore create mode 100644 contrib/mw-to-git/.perlcriticrc create mode 100644 contrib/mw-to-git/Git/Mediawiki.pm create mode 100644 contrib/mw-to-git/Makefile create mode 100755 contrib/mw-to-git/bin-wrapper/git create mode 100755 contrib/mw-to-git/git-mw.perl create mode 100755 contrib/mw-to-git/git-remote-mediawiki.perl create mode 100644 contrib/mw-to-git/git-remote-mediawiki.txt create mode 100644 contrib/mw-to-git/t/.gitignore create mode 100644 contrib/mw-to-git/t/Makefile create mode 100644 contrib/mw-to-git/t/README create mode 100755 contrib/mw-to-git/t/install-wiki.sh create mode 100644 contrib/mw-to-git/t/push-pull-tests.sh create mode 100755 contrib/mw-to-git/t/t9360-mw-to-git-clone.sh create mode 100755 contrib/mw-to-git/t/t9361-mw-to-git-push-pull.sh create mode 100755 contrib/mw-to-git/t/t9362-mw-to-git-utf8.sh create mode 100755 contrib/mw-to-git/t/t9363-mw-to-git-export-import.sh create mode 100755 contrib/mw-to-git/t/t9364-pull-by-rev.sh create mode 100755 contrib/mw-to-git/t/t9365-continuing-queries.sh create mode 100755 contrib/mw-to-git/t/test-gitmw-lib.sh create mode 100755 contrib/mw-to-git/t/test-gitmw.pl create mode 100644 contrib/mw-to-git/t/test.config create mode 100644 contrib/persistent-https/LICENSE create mode 100644 contrib/persistent-https/Makefile create mode 100644 contrib/persistent-https/README create mode 100644 contrib/persistent-https/client.go create mode 100644 contrib/persistent-https/main.go create mode 100644 contrib/persistent-https/proxy.go create mode 100644 contrib/persistent-https/socket.go create mode 100644 contrib/remote-helpers/README create mode 100755 contrib/remote-helpers/git-remote-bzr create mode 100755 contrib/remote-helpers/git-remote-hg create mode 100755 contrib/remotes2config.sh create mode 100755 contrib/rerere-train.sh create mode 100755 contrib/stats/git-common-hash create mode 100755 contrib/stats/mailmap.pl create mode 100755 contrib/stats/packinfo.pl create mode 100644 contrib/subtree/.gitignore create mode 100644 contrib/subtree/COPYING create mode 100644 contrib/subtree/INSTALL create mode 100644 contrib/subtree/Makefile create mode 100644 contrib/subtree/README create mode 100755 contrib/subtree/git-subtree.sh create mode 100644 contrib/subtree/git-subtree.txt create mode 100644 contrib/subtree/meson.build create mode 100644 contrib/subtree/t/Makefile create mode 100755 contrib/subtree/t/t7900-subtree.sh create mode 100644 contrib/subtree/todo create mode 100644 contrib/thunderbird-patch-inline/README create mode 100755 contrib/thunderbird-patch-inline/appp.sh create mode 100644 contrib/update-unicode/.gitignore create mode 100644 contrib/update-unicode/README create mode 100755 contrib/update-unicode/update_unicode.sh create mode 100644 contrib/vscode/.gitattributes create mode 100644 contrib/vscode/README.md create mode 100755 contrib/vscode/init.sh create mode 100644 contrib/workdir/.gitattributes create mode 100755 contrib/workdir/git-new-workdir create mode 100644 convert.c create mode 100644 convert.h create mode 100644 copy.c create mode 100644 copy.h create mode 100644 credential.c create mode 100644 credential.h create mode 100644 csum-file.c create mode 100644 csum-file.h create mode 100644 ctype.c create mode 100644 daemon.c create mode 100644 date.c create mode 100644 date.h create mode 100644 decorate.c create mode 100644 decorate.h create mode 100644 delta-islands.c create mode 100644 delta-islands.h create mode 100644 delta.h create mode 100755 detect-compiler create mode 100644 diagnose.c create mode 100644 diagnose.h create mode 100644 diff-delta.c create mode 100644 diff-lib.c create mode 100644 diff-merges.c create mode 100644 diff-merges.h create mode 100644 diff-no-index.c create mode 100644 diff.c create mode 100644 diff.h create mode 100644 diffcore-break.c create mode 100644 diffcore-delta.c create mode 100644 diffcore-order.c create mode 100644 diffcore-pickaxe.c create mode 100644 diffcore-rename.c create mode 100644 diffcore-rotate.c create mode 100644 diffcore.h create mode 100644 dir-iterator.c create mode 100644 dir-iterator.h create mode 100644 dir.c create mode 100644 dir.h create mode 100644 editor.c create mode 100644 editor.h create mode 100644 entry.c create mode 100644 entry.h create mode 100644 environment.c create mode 100644 environment.h create mode 100644 ewah/bitmap.c create mode 100644 ewah/ewah_bitmap.c create mode 100644 ewah/ewah_io.c create mode 100644 ewah/ewah_rlw.c create mode 100644 ewah/ewok.h create mode 100644 ewah/ewok_rlw.h create mode 100644 exec-cmd.c create mode 100644 exec-cmd.h create mode 100644 fetch-negotiator.c create mode 100644 fetch-negotiator.h create mode 100644 fetch-pack.c create mode 100644 fetch-pack.h create mode 100644 fmt-merge-msg.c create mode 100644 fmt-merge-msg.h create mode 100644 fsck.c create mode 100644 fsck.h create mode 100644 fsmonitor--daemon.h create mode 100644 fsmonitor-ipc.c create mode 100644 fsmonitor-ipc.h create mode 100644 fsmonitor-ll.h create mode 100644 fsmonitor-path-utils.h create mode 100644 fsmonitor-settings.c create mode 100644 fsmonitor-settings.h create mode 100644 fsmonitor.c create mode 100644 fsmonitor.h create mode 100755 generate-cmdlist.sh create mode 100755 generate-configlist.sh create mode 100755 generate-hooklist.sh create mode 100755 generate-perl.sh create mode 100755 generate-python.sh create mode 100755 generate-script.sh create mode 100644 gettext.c create mode 100644 gettext.h create mode 100755 git-archimport.perl create mode 100644 git-compat-util.h create mode 100644 git-curl-compat.h create mode 100755 git-cvsexportcommit.perl create mode 100755 git-cvsimport.perl create mode 100755 git-cvsserver.perl create mode 100755 git-difftool--helper.sh create mode 100755 git-filter-branch.sh create mode 100644 git-gui/.gitattributes create mode 100644 git-gui/.gitignore create mode 100755 git-gui/GIT-VERSION-GEN create mode 100644 git-gui/Makefile create mode 100644 git-gui/README.md create mode 100755 git-gui/git-gui--askpass create mode 100755 git-gui/git-gui.sh create mode 100644 git-gui/lib/about.tcl create mode 100644 git-gui/lib/blame.tcl create mode 100644 git-gui/lib/branch.tcl create mode 100644 git-gui/lib/branch_checkout.tcl create mode 100644 git-gui/lib/branch_create.tcl create mode 100644 git-gui/lib/branch_delete.tcl create mode 100644 git-gui/lib/branch_rename.tcl create mode 100644 git-gui/lib/browser.tcl create mode 100644 git-gui/lib/checkout_op.tcl create mode 100644 git-gui/lib/choose_font.tcl create mode 100644 git-gui/lib/choose_repository.tcl create mode 100644 git-gui/lib/choose_rev.tcl create mode 100644 git-gui/lib/chord.tcl create mode 100644 git-gui/lib/class.tcl create mode 100644 git-gui/lib/commit.tcl create mode 100644 git-gui/lib/console.tcl create mode 100644 git-gui/lib/database.tcl create mode 100644 git-gui/lib/date.tcl create mode 100644 git-gui/lib/diff.tcl create mode 100644 git-gui/lib/encoding.tcl create mode 100644 git-gui/lib/error.tcl create mode 100644 git-gui/lib/git-gui.ico create mode 100644 git-gui/lib/index.tcl create mode 100644 git-gui/lib/line.tcl create mode 100644 git-gui/lib/logo.tcl create mode 100644 git-gui/lib/merge.tcl create mode 100644 git-gui/lib/mergetool.tcl create mode 100644 git-gui/lib/option.tcl create mode 100644 git-gui/lib/remote.tcl create mode 100644 git-gui/lib/remote_add.tcl create mode 100644 git-gui/lib/remote_branch_delete.tcl create mode 100644 git-gui/lib/search.tcl create mode 100644 git-gui/lib/shortcut.tcl create mode 100644 git-gui/lib/spellcheck.tcl create mode 100644 git-gui/lib/sshkey.tcl create mode 100644 git-gui/lib/status_bar.tcl create mode 100644 git-gui/lib/themed.tcl create mode 100644 git-gui/lib/tools.tcl create mode 100644 git-gui/lib/tools_dlg.tcl create mode 100644 git-gui/lib/transport.tcl create mode 100644 git-gui/lib/win32.tcl create mode 100644 git-gui/lib/win32_shortcut.js create mode 100644 git-gui/macosx/AppMain.tcl create mode 100644 git-gui/macosx/Info.plist create mode 100644 git-gui/macosx/git-gui.icns create mode 100644 git-gui/po/.gitignore create mode 100644 git-gui/po/README create mode 100644 git-gui/po/bg.po create mode 100644 git-gui/po/de.po create mode 100644 git-gui/po/el.po create mode 100644 git-gui/po/fr.po create mode 100644 git-gui/po/git-gui.pot create mode 100644 git-gui/po/glossary/Makefile create mode 100644 git-gui/po/glossary/bg.po create mode 100644 git-gui/po/glossary/de.po create mode 100644 git-gui/po/glossary/el.po create mode 100644 git-gui/po/glossary/fr.po create mode 100644 git-gui/po/glossary/git-gui-glossary.pot create mode 100644 git-gui/po/glossary/git-gui-glossary.txt create mode 100644 git-gui/po/glossary/it.po create mode 100644 git-gui/po/glossary/pt_br.po create mode 100644 git-gui/po/glossary/pt_pt.po create mode 100755 git-gui/po/glossary/txt-to-pot.sh create mode 100644 git-gui/po/glossary/zh_cn.po create mode 100644 git-gui/po/hu.po create mode 100644 git-gui/po/it.po create mode 100644 git-gui/po/ja.po create mode 100644 git-gui/po/nb.po create mode 100755 git-gui/po/po2msg.sh create mode 100644 git-gui/po/pt_br.po create mode 100644 git-gui/po/pt_pt.po create mode 100644 git-gui/po/ru.po create mode 100644 git-gui/po/sv.po create mode 100644 git-gui/po/vi.po create mode 100644 git-gui/po/zh_cn.po create mode 100755 git-gui/windows/git-gui.sh create mode 100755 git-instaweb.sh create mode 100755 git-merge-octopus.sh create mode 100755 git-merge-one-file.sh create mode 100755 git-merge-resolve.sh create mode 100644 git-mergetool--lib.sh create mode 100755 git-mergetool.sh create mode 100755 git-p4.py create mode 100755 git-quiltimport.sh create mode 100755 git-request-pull.sh create mode 100755 git-send-email.perl create mode 100644 git-sh-i18n.sh create mode 100644 git-sh-setup.sh create mode 100755 git-submodule.sh create mode 100755 git-svn.perl create mode 100755 git-web--browse.sh create mode 100644 git-zlib.c create mode 100644 git-zlib.h create mode 100644 git.c create mode 100644 git.rc.in create mode 100644 gitk-git/.gitignore create mode 100644 gitk-git/Makefile create mode 100755 gitk-git/gitk create mode 100644 gitk-git/po/.gitignore create mode 100644 gitk-git/po/bg.po create mode 100644 gitk-git/po/ca.po create mode 100644 gitk-git/po/de.po create mode 100644 gitk-git/po/es.po create mode 100644 gitk-git/po/fr.po create mode 100644 gitk-git/po/hu.po create mode 100644 gitk-git/po/it.po create mode 100644 gitk-git/po/ja.po create mode 100755 gitk-git/po/po2msg.sh create mode 100644 gitk-git/po/pt_br.po create mode 100644 gitk-git/po/pt_pt.po create mode 100644 gitk-git/po/ru.po create mode 100644 gitk-git/po/sv.po create mode 100644 gitk-git/po/vi.po create mode 100644 gitk-git/po/zh_cn.po create mode 100644 gitweb/GITWEB-BUILD-OPTIONS.in create mode 100644 gitweb/INSTALL create mode 100644 gitweb/Makefile create mode 100644 gitweb/README create mode 100755 gitweb/generate-gitweb-cgi.sh create mode 100755 gitweb/generate-gitweb-js.sh create mode 100755 gitweb/gitweb.perl create mode 100644 gitweb/meson.build create mode 100644 gitweb/static/git-favicon.png create mode 100644 gitweb/static/git-logo.png create mode 100644 gitweb/static/gitweb.css create mode 100644 gitweb/static/js/README create mode 100644 gitweb/static/js/adjust-timezone.js create mode 100644 gitweb/static/js/blame_incremental.js create mode 100644 gitweb/static/js/javascript-detection.js create mode 100644 gitweb/static/js/lib/common-lib.js create mode 100644 gitweb/static/js/lib/cookies.js create mode 100644 gitweb/static/js/lib/datetime.js create mode 100644 gpg-interface.c create mode 100644 gpg-interface.h create mode 100644 graph.c create mode 100644 graph.h create mode 100644 grep.c create mode 100644 grep.h create mode 100644 hash-lookup.c create mode 100644 hash-lookup.h create mode 100644 hash.h create mode 100644 hashmap.c create mode 100644 hashmap.h create mode 100644 help.c create mode 100644 help.h create mode 100644 hex-ll.c create mode 100644 hex-ll.h create mode 100644 hex.c create mode 100644 hex.h create mode 100644 hook.c create mode 100644 hook.h create mode 100644 http-backend.c create mode 100644 http-fetch.c create mode 100644 http-push.c create mode 100644 http-walker.c create mode 100644 http.c create mode 100644 http.h create mode 100644 ident.c create mode 100644 ident.h create mode 100644 imap-send.c create mode 100644 iterator.h create mode 100644 json-writer.c create mode 100644 json-writer.h create mode 100644 khash.h create mode 100644 kwset.c create mode 100644 kwset.h create mode 100644 levenshtein.c create mode 100644 levenshtein.h create mode 100644 line-log.c create mode 100644 line-log.h create mode 100644 line-range.c create mode 100644 line-range.h create mode 100644 linear-assignment.c create mode 100644 linear-assignment.h create mode 100644 list-objects-filter-options.c create mode 100644 list-objects-filter-options.h create mode 100644 list-objects-filter.c create mode 100644 list-objects-filter.h create mode 100644 list-objects.c create mode 100644 list-objects.h create mode 100644 list.h create mode 100644 lockfile.c create mode 100644 lockfile.h create mode 100644 log-tree.c create mode 100644 log-tree.h create mode 100644 loose.c create mode 100644 loose.h create mode 100644 ls-refs.c create mode 100644 ls-refs.h create mode 100644 mailinfo.c create mode 100644 mailinfo.h create mode 100644 mailmap.c create mode 100644 mailmap.h create mode 100644 match-trees.c create mode 100644 match-trees.h create mode 100644 mem-pool.c create mode 100644 mem-pool.h create mode 100644 merge-blobs.c create mode 100644 merge-blobs.h create mode 100644 merge-ll.c create mode 100644 merge-ll.h create mode 100644 merge-ort-wrappers.c create mode 100644 merge-ort-wrappers.h create mode 100644 merge-ort.c create mode 100644 merge-ort.h create mode 100644 merge-recursive.c create mode 100644 merge-recursive.h create mode 100644 merge.c create mode 100644 merge.h create mode 100644 mergesort.h create mode 100644 mergetools/araxis create mode 100644 mergetools/bc create mode 100644 mergetools/codecompare create mode 100644 mergetools/deltawalker create mode 100644 mergetools/diffmerge create mode 100644 mergetools/diffuse create mode 100644 mergetools/ecmerge create mode 100644 mergetools/emerge create mode 100644 mergetools/examdiff create mode 100644 mergetools/guiffy create mode 100644 mergetools/gvimdiff create mode 100644 mergetools/kdiff3 create mode 100644 mergetools/kompare create mode 100644 mergetools/meld create mode 100644 mergetools/nvimdiff create mode 100644 mergetools/opendiff create mode 100644 mergetools/p4merge create mode 100644 mergetools/smerge create mode 100644 mergetools/tkdiff create mode 100644 mergetools/tortoisemerge create mode 100644 mergetools/vimdiff create mode 100644 mergetools/vscode create mode 100644 mergetools/winmerge create mode 100644 mergetools/xxdiff create mode 100644 meson.build create mode 100644 meson_options.txt create mode 100644 midx-write.c create mode 100644 midx.c create mode 100644 midx.h create mode 100644 name-hash.c create mode 100644 name-hash.h create mode 100644 negotiator/default.c create mode 100644 negotiator/default.h create mode 100644 negotiator/noop.c create mode 100644 negotiator/noop.h create mode 100644 negotiator/skipping.c create mode 100644 negotiator/skipping.h create mode 100644 notes-cache.c create mode 100644 notes-cache.h create mode 100644 notes-merge.c create mode 100644 notes-merge.h create mode 100644 notes-utils.c create mode 100644 notes-utils.h create mode 100644 notes.c create mode 100644 notes.h create mode 100644 object-file-convert.c create mode 100644 object-file-convert.h create mode 100644 object-file.c create mode 100644 object-file.h create mode 100644 object-name.c create mode 100644 object-name.h create mode 100644 object-store-ll.h create mode 100644 object-store.h create mode 100644 object.c create mode 100644 object.h create mode 100644 oid-array.c create mode 100644 oid-array.h create mode 100644 oidmap.c create mode 100644 oidmap.h create mode 100644 oidset.c create mode 100644 oidset.h create mode 100644 oidtree.c create mode 100644 oidtree.h create mode 100644 oss-fuzz/.gitignore create mode 100644 oss-fuzz/dummy-cmd-main.c create mode 100644 oss-fuzz/fuzz-commit-graph.c create mode 100644 oss-fuzz/fuzz-config.c create mode 100644 oss-fuzz/fuzz-credential-from-url-gently.c create mode 100644 oss-fuzz/fuzz-date.c create mode 100644 oss-fuzz/fuzz-pack-headers.c create mode 100644 oss-fuzz/fuzz-pack-idx.c create mode 100644 oss-fuzz/fuzz-parse-attr-line.c create mode 100644 oss-fuzz/fuzz-url-decode-mem.c create mode 100644 pack-bitmap-write.c create mode 100644 pack-bitmap.c create mode 100644 pack-bitmap.h create mode 100644 pack-check.c create mode 100644 pack-mtimes.c create mode 100644 pack-mtimes.h create mode 100644 pack-objects.c create mode 100644 pack-objects.h create mode 100644 pack-revindex.c create mode 100644 pack-revindex.h create mode 100644 pack-write.c create mode 100644 pack.h create mode 100644 packfile.c create mode 100644 packfile.h create mode 100644 pager.c create mode 100644 pager.h create mode 100644 parallel-checkout.c create mode 100644 parallel-checkout.h create mode 100644 parse-options-cb.c create mode 100644 parse-options.c create mode 100644 parse-options.h create mode 100644 parse.c create mode 100644 parse.h create mode 100644 patch-delta.c create mode 100644 patch-ids.c create mode 100644 patch-ids.h create mode 100644 path-walk.c create mode 100644 path-walk.h create mode 100644 path.c create mode 100644 path.h create mode 100644 pathspec.c create mode 100644 pathspec.h create mode 100644 perl/.gitignore create mode 100644 perl/FromCPAN/.gitattributes create mode 100644 perl/FromCPAN/Error.pm create mode 100644 perl/FromCPAN/Mail/Address.pm create mode 100644 perl/FromCPAN/Mail/meson.build create mode 100644 perl/FromCPAN/meson.build create mode 100644 perl/Git.pm create mode 100644 perl/Git/I18N.pm create mode 100644 perl/Git/IndexInfo.pm create mode 100644 perl/Git/LoadCPAN.pm create mode 100644 perl/Git/LoadCPAN/Error.pm create mode 100644 perl/Git/LoadCPAN/Mail/Address.pm create mode 100644 perl/Git/LoadCPAN/Mail/meson.build create mode 100644 perl/Git/LoadCPAN/meson.build create mode 100644 perl/Git/Packet.pm create mode 100644 perl/Git/SVN.pm create mode 100644 perl/Git/SVN/Editor.pm create mode 100644 perl/Git/SVN/Fetcher.pm create mode 100644 perl/Git/SVN/GlobSpec.pm create mode 100644 perl/Git/SVN/Log.pm create mode 100644 perl/Git/SVN/Memoize/YAML.pm create mode 100644 perl/Git/SVN/Memoize/meson.build create mode 100644 perl/Git/SVN/Migration.pm create mode 100644 perl/Git/SVN/Prompt.pm create mode 100644 perl/Git/SVN/Ra.pm create mode 100644 perl/Git/SVN/Utils.pm create mode 100644 perl/Git/SVN/meson.build create mode 100644 perl/Git/meson.build create mode 100644 perl/header_templates/fixed_prefix.template.pl create mode 100644 perl/header_templates/runtime_prefix.template.pl create mode 100644 perl/meson.build create mode 100644 pkt-line.c create mode 100644 pkt-line.h create mode 100644 po/.gitignore create mode 100644 po/README.md create mode 100644 po/TEAMS create mode 100644 po/bg.po create mode 100644 po/ca.po create mode 100644 po/de.po create mode 100644 po/el.po create mode 100644 po/es.po create mode 100644 po/fr.po create mode 100644 po/id.po create mode 100644 po/is.po create mode 100644 po/it.po create mode 100644 po/ko.po create mode 100644 po/meson.build create mode 100644 po/pl.po create mode 100644 po/pt_PT.po create mode 100644 po/ru.po create mode 100644 po/sv.po create mode 100644 po/tr.po create mode 100644 po/uk.po create mode 100644 po/vi.po create mode 100644 po/zh_CN.po create mode 100644 po/zh_TW.po create mode 100644 preload-index.c create mode 100644 preload-index.h create mode 100644 pretty.c create mode 100644 pretty.h create mode 100644 prio-queue.c create mode 100644 prio-queue.h create mode 100644 progress.c create mode 100644 progress.h create mode 100644 promisor-remote.c create mode 100644 promisor-remote.h create mode 100644 prompt.c create mode 100644 prompt.h create mode 100644 protocol-caps.c create mode 100644 protocol-caps.h create mode 100644 protocol.c create mode 100644 protocol.h create mode 100644 prune-packed.c create mode 100644 prune-packed.h create mode 100644 pseudo-merge.c create mode 100644 pseudo-merge.h create mode 100644 quote.c create mode 100644 quote.h create mode 100644 range-diff.c create mode 100644 range-diff.h create mode 100644 reachable.c create mode 100644 reachable.h create mode 100644 read-cache-ll.h create mode 100644 read-cache.c create mode 100644 read-cache.h create mode 100644 rebase-interactive.c create mode 100644 rebase-interactive.h create mode 100644 rebase.c create mode 100644 rebase.h create mode 100644 ref-filter.c create mode 100644 ref-filter.h create mode 100644 reflog-walk.c create mode 100644 reflog-walk.h create mode 100644 reflog.c create mode 100644 reflog.h create mode 100644 refs.c create mode 100644 refs.h create mode 100644 refs/debug.c create mode 100644 refs/files-backend.c create mode 100644 refs/iterator.c create mode 100644 refs/packed-backend.c create mode 100644 refs/packed-backend.h create mode 100644 refs/ref-cache.c create mode 100644 refs/ref-cache.h create mode 100644 refs/refs-internal.h create mode 100644 refs/reftable-backend.c create mode 100644 refspec.c create mode 100644 refspec.h create mode 100644 reftable/LICENSE create mode 100644 reftable/basics.c create mode 100644 reftable/basics.h create mode 100644 reftable/block.c create mode 100644 reftable/block.h create mode 100644 reftable/blocksource.c create mode 100644 reftable/blocksource.h create mode 100644 reftable/constants.h create mode 100644 reftable/error.c create mode 100644 reftable/iter.c create mode 100644 reftable/iter.h create mode 100644 reftable/merged.c create mode 100644 reftable/merged.h create mode 100644 reftable/pq.c create mode 100644 reftable/pq.h create mode 100644 reftable/reader.c create mode 100644 reftable/reader.h create mode 100644 reftable/record.c create mode 100644 reftable/record.h create mode 100644 reftable/reftable-basics.h create mode 100644 reftable/reftable-blocksource.h create mode 100644 reftable/reftable-error.h create mode 100644 reftable/reftable-iterator.h create mode 100644 reftable/reftable-merged.h create mode 100644 reftable/reftable-reader.h create mode 100644 reftable/reftable-record.h create mode 100644 reftable/reftable-stack.h create mode 100644 reftable/reftable-writer.h create mode 100644 reftable/stack.c create mode 100644 reftable/stack.h create mode 100644 reftable/system.c create mode 100644 reftable/system.h create mode 100644 reftable/tree.c create mode 100644 reftable/tree.h create mode 100644 reftable/writer.c create mode 100644 reftable/writer.h create mode 100644 remote-curl.c create mode 100644 remote.c create mode 100644 remote.h create mode 100644 replace-object.c create mode 100644 replace-object.h create mode 100644 repo-settings.c create mode 100644 repo-settings.h create mode 100644 repository.c create mode 100644 repository.h create mode 100644 rerere.c create mode 100644 rerere.h create mode 100644 reset.c create mode 100644 reset.h create mode 100644 resolve-undo.c create mode 100644 resolve-undo.h create mode 100644 revision.c create mode 100644 revision.h create mode 100644 run-command.c create mode 100644 run-command.h create mode 100644 sane-ctype.h create mode 100644 scalar.c create mode 100644 send-pack.c create mode 100644 send-pack.h create mode 100644 sequencer.c create mode 100644 sequencer.h create mode 100644 serve.c create mode 100644 serve.h create mode 100644 server-info.c create mode 100644 server-info.h create mode 100644 setup.c create mode 100644 setup.h create mode 100644 sh-i18n--envsubst.c create mode 100644 sha1/openssl.h create mode 160000 sha1collisiondetection create mode 100644 sha1dc/.gitattributes create mode 100644 sha1dc/LICENSE.txt create mode 100644 sha1dc/sha1.c create mode 100644 sha1dc/sha1.h create mode 100644 sha1dc/ubc_check.c create mode 100644 sha1dc/ubc_check.h create mode 100644 sha1dc_git.c create mode 100644 sha1dc_git.h create mode 100644 sha256/block/sha256.c create mode 100644 sha256/block/sha256.h create mode 100644 sha256/gcrypt.h create mode 100644 sha256/nettle.h create mode 100644 sha256/openssl.h create mode 100644 shallow.c create mode 100644 shallow.h create mode 100644 shared.mak create mode 100644 shell.c create mode 100644 shortlog.h create mode 100644 sideband.c create mode 100644 sideband.h create mode 100644 sigchain.c create mode 100644 sigchain.h create mode 100644 simple-ipc.h create mode 100644 sparse-index.c create mode 100644 sparse-index.h create mode 100644 split-index.c create mode 100644 split-index.h create mode 100644 stable-qsort.c create mode 100644 statinfo.c create mode 100644 statinfo.h create mode 100644 strbuf.c create mode 100644 strbuf.h create mode 100644 streaming.c create mode 100644 streaming.h create mode 100644 string-list.c create mode 100644 string-list.h create mode 100644 strmap.c create mode 100644 strmap.h create mode 100644 strvec.c create mode 100644 strvec.h create mode 100644 sub-process.c create mode 100644 sub-process.h create mode 100644 submodule-config.c create mode 100644 submodule-config.h create mode 100644 submodule.c create mode 100644 submodule.h create mode 100644 subprojects/.gitignore create mode 100644 subprojects/curl.wrap create mode 100644 subprojects/expat.wrap create mode 100644 subprojects/openssl.wrap create mode 100644 subprojects/pcre2.wrap create mode 100644 subprojects/zlib.wrap create mode 100644 symlinks.c create mode 100644 symlinks.h create mode 100644 t/.gitattributes create mode 100644 t/.gitignore create mode 100755 t/Git-SVN/00compile.t create mode 100755 t/Git-SVN/Utils/add_path_to_url.t create mode 100755 t/Git-SVN/Utils/can_compress.t create mode 100755 t/Git-SVN/Utils/canonicalize_url.t create mode 100755 t/Git-SVN/Utils/collapse_dotdot.t create mode 100755 t/Git-SVN/Utils/fatal.t create mode 100755 t/Git-SVN/Utils/join_paths.t create mode 100644 t/Makefile create mode 100644 t/README create mode 100755 t/aggregate-results.sh create mode 100644 t/annotate-tests.sh create mode 100644 t/chainlint-cat.pl create mode 100755 t/chainlint.pl create mode 100644 t/chainlint/arithmetic-expansion.expect create mode 100644 t/chainlint/arithmetic-expansion.test create mode 100644 t/chainlint/bash-array.expect create mode 100644 t/chainlint/bash-array.test create mode 100644 t/chainlint/blank-line-before-esac.expect create mode 100644 t/chainlint/blank-line-before-esac.test create mode 100644 t/chainlint/blank-line.expect create mode 100644 t/chainlint/blank-line.test create mode 100644 t/chainlint/block-comment.expect create mode 100644 t/chainlint/block-comment.test create mode 100644 t/chainlint/block.expect create mode 100644 t/chainlint/block.test create mode 100644 t/chainlint/broken-chain.expect create mode 100644 t/chainlint/broken-chain.test create mode 100644 t/chainlint/case-comment.expect create mode 100644 t/chainlint/case-comment.test create mode 100644 t/chainlint/case.expect create mode 100644 t/chainlint/case.test create mode 100644 t/chainlint/chain-break-background.expect create mode 100644 t/chainlint/chain-break-background.test create mode 100644 t/chainlint/chain-break-continue.expect create mode 100644 t/chainlint/chain-break-continue.test create mode 100644 t/chainlint/chain-break-false.expect create mode 100644 t/chainlint/chain-break-false.test create mode 100644 t/chainlint/chain-break-return-exit.expect create mode 100644 t/chainlint/chain-break-return-exit.test create mode 100644 t/chainlint/chain-break-status.expect create mode 100644 t/chainlint/chain-break-status.test create mode 100644 t/chainlint/chained-block.expect create mode 100644 t/chainlint/chained-block.test create mode 100644 t/chainlint/chained-subshell.expect create mode 100644 t/chainlint/chained-subshell.test create mode 100644 t/chainlint/close-nested-and-parent-together.expect create mode 100644 t/chainlint/close-nested-and-parent-together.test create mode 100644 t/chainlint/close-subshell.expect create mode 100644 t/chainlint/close-subshell.test create mode 100644 t/chainlint/command-substitution-subsubshell.expect create mode 100644 t/chainlint/command-substitution-subsubshell.test create mode 100644 t/chainlint/command-substitution.expect create mode 100644 t/chainlint/command-substitution.test create mode 100644 t/chainlint/comment.expect create mode 100644 t/chainlint/comment.test create mode 100644 t/chainlint/complex-if-in-cuddled-loop.expect create mode 100644 t/chainlint/complex-if-in-cuddled-loop.test create mode 100644 t/chainlint/cuddled-if-then-else.expect create mode 100644 t/chainlint/cuddled-if-then-else.test create mode 100644 t/chainlint/cuddled-loop.expect create mode 100644 t/chainlint/cuddled-loop.test create mode 100644 t/chainlint/cuddled.expect create mode 100644 t/chainlint/cuddled.test create mode 100644 t/chainlint/double-here-doc.expect create mode 100644 t/chainlint/double-here-doc.test create mode 100644 t/chainlint/dqstring-line-splice.expect create mode 100644 t/chainlint/dqstring-line-splice.test create mode 100644 t/chainlint/dqstring-no-interpolate.expect create mode 100644 t/chainlint/dqstring-no-interpolate.test create mode 100644 t/chainlint/empty-here-doc.expect create mode 100644 t/chainlint/empty-here-doc.test create mode 100644 t/chainlint/exclamation.expect create mode 100644 t/chainlint/exclamation.test create mode 100644 t/chainlint/exit-loop.expect create mode 100644 t/chainlint/exit-loop.test create mode 100644 t/chainlint/exit-subshell.expect create mode 100644 t/chainlint/exit-subshell.test create mode 100644 t/chainlint/for-loop-abbreviated.expect create mode 100644 t/chainlint/for-loop-abbreviated.test create mode 100644 t/chainlint/for-loop.expect create mode 100644 t/chainlint/for-loop.test create mode 100644 t/chainlint/function.expect create mode 100644 t/chainlint/function.test create mode 100644 t/chainlint/here-doc-body-indent.expect create mode 100644 t/chainlint/here-doc-body-indent.test create mode 100644 t/chainlint/here-doc-body-pathological.expect create mode 100644 t/chainlint/here-doc-body-pathological.test create mode 100644 t/chainlint/here-doc-body.expect create mode 100644 t/chainlint/here-doc-body.test create mode 100644 t/chainlint/here-doc-close-subshell.expect create mode 100644 t/chainlint/here-doc-close-subshell.test create mode 100644 t/chainlint/here-doc-double.expect create mode 100644 t/chainlint/here-doc-double.test create mode 100644 t/chainlint/here-doc-indent-operator.expect create mode 100644 t/chainlint/here-doc-indent-operator.test create mode 100644 t/chainlint/here-doc-multi-line-command-subst.expect create mode 100644 t/chainlint/here-doc-multi-line-command-subst.test create mode 100644 t/chainlint/here-doc-multi-line-string.expect create mode 100644 t/chainlint/here-doc-multi-line-string.test create mode 100644 t/chainlint/here-doc.expect create mode 100644 t/chainlint/here-doc.test create mode 100644 t/chainlint/if-condition-split.expect create mode 100644 t/chainlint/if-condition-split.test create mode 100644 t/chainlint/if-in-loop.expect create mode 100644 t/chainlint/if-in-loop.test create mode 100644 t/chainlint/if-then-else.expect create mode 100644 t/chainlint/if-then-else.test create mode 100644 t/chainlint/incomplete-line.expect create mode 100644 t/chainlint/incomplete-line.test create mode 100644 t/chainlint/inline-comment.expect create mode 100644 t/chainlint/inline-comment.test create mode 100644 t/chainlint/loop-detect-failure.expect create mode 100644 t/chainlint/loop-detect-failure.test create mode 100644 t/chainlint/loop-detect-status.expect create mode 100644 t/chainlint/loop-detect-status.test create mode 100644 t/chainlint/loop-in-if.expect create mode 100644 t/chainlint/loop-in-if.test create mode 100644 t/chainlint/loop-upstream-pipe.expect create mode 100644 t/chainlint/loop-upstream-pipe.test create mode 100644 t/chainlint/multi-line-nested-command-substitution.expect create mode 100644 t/chainlint/multi-line-nested-command-substitution.test create mode 100644 t/chainlint/multi-line-string.expect create mode 100644 t/chainlint/multi-line-string.test create mode 100644 t/chainlint/negated-one-liner.expect create mode 100644 t/chainlint/negated-one-liner.test create mode 100644 t/chainlint/nested-cuddled-subshell.expect create mode 100644 t/chainlint/nested-cuddled-subshell.test create mode 100644 t/chainlint/nested-here-doc.expect create mode 100644 t/chainlint/nested-here-doc.test create mode 100644 t/chainlint/nested-loop-detect-failure.expect create mode 100644 t/chainlint/nested-loop-detect-failure.test create mode 100644 t/chainlint/nested-subshell-comment.expect create mode 100644 t/chainlint/nested-subshell-comment.test create mode 100644 t/chainlint/nested-subshell.expect create mode 100644 t/chainlint/nested-subshell.test create mode 100644 t/chainlint/not-heredoc.expect create mode 100644 t/chainlint/not-heredoc.test create mode 100644 t/chainlint/one-liner-for-loop.expect create mode 100644 t/chainlint/one-liner-for-loop.test create mode 100644 t/chainlint/one-liner.expect create mode 100644 t/chainlint/one-liner.test create mode 100644 t/chainlint/p4-filespec.expect create mode 100644 t/chainlint/p4-filespec.test create mode 100644 t/chainlint/pipe.expect create mode 100644 t/chainlint/pipe.test create mode 100644 t/chainlint/return-loop.expect create mode 100644 t/chainlint/return-loop.test create mode 100644 t/chainlint/semicolon.expect create mode 100644 t/chainlint/semicolon.test create mode 100644 t/chainlint/sqstring-in-sqstring.expect create mode 100644 t/chainlint/sqstring-in-sqstring.test create mode 100644 t/chainlint/subshell-here-doc.expect create mode 100644 t/chainlint/subshell-here-doc.test create mode 100644 t/chainlint/subshell-one-liner.expect create mode 100644 t/chainlint/subshell-one-liner.test create mode 100644 t/chainlint/t7900-subtree.expect create mode 100644 t/chainlint/t7900-subtree.test create mode 100644 t/chainlint/token-pasting.expect create mode 100644 t/chainlint/token-pasting.test create mode 100644 t/chainlint/unclosed-here-doc-indent.expect create mode 100644 t/chainlint/unclosed-here-doc-indent.test create mode 100644 t/chainlint/unclosed-here-doc.expect create mode 100644 t/chainlint/unclosed-here-doc.test create mode 100644 t/chainlint/while-loop.expect create mode 100644 t/chainlint/while-loop.test create mode 100755 t/check-non-portable-shell.pl create mode 100644 t/helper/.gitignore create mode 100644 t/helper/meson.build create mode 100644 t/helper/test-advise.c create mode 100644 t/helper/test-bitmap.c create mode 100644 t/helper/test-bloom.c create mode 100644 t/helper/test-bundle-uri.c create mode 100644 t/helper/test-cache-tree.c create mode 100644 t/helper/test-chmtime.c create mode 100644 t/helper/test-config.c create mode 100644 t/helper/test-crontab.c create mode 100644 t/helper/test-csprng.c create mode 100644 t/helper/test-date.c create mode 100644 t/helper/test-delete-gpgsig.c create mode 100644 t/helper/test-delta.c create mode 100644 t/helper/test-dir-iterator.c create mode 100644 t/helper/test-drop-caches.c create mode 100644 t/helper/test-dump-cache-tree.c create mode 100644 t/helper/test-dump-fsmonitor.c create mode 100644 t/helper/test-dump-split-index.c create mode 100644 t/helper/test-dump-untracked-cache.c create mode 100644 t/helper/test-env-helper.c create mode 100644 t/helper/test-example-tap.c create mode 100644 t/helper/test-fake-ssh.c create mode 100644 t/helper/test-find-pack.c create mode 100644 t/helper/test-fsmonitor-client.c create mode 100644 t/helper/test-genrandom.c create mode 100644 t/helper/test-genzeros.c create mode 100644 t/helper/test-getcwd.c create mode 100644 t/helper/test-hash-speed.c create mode 100644 t/helper/test-hash.c create mode 100644 t/helper/test-hashmap.c create mode 100644 t/helper/test-hexdump.c create mode 100644 t/helper/test-json-writer.c create mode 100644 t/helper/test-lazy-init-name-hash.c create mode 100644 t/helper/test-match-trees.c create mode 100644 t/helper/test-mergesort.c create mode 100644 t/helper/test-mktemp.c create mode 100644 t/helper/test-online-cpus.c create mode 100644 t/helper/test-pack-mtimes.c create mode 100644 t/helper/test-parse-options.c create mode 100644 t/helper/test-parse-pathspec-file.c create mode 100644 t/helper/test-partial-clone.c create mode 100644 t/helper/test-path-utils.c create mode 100644 t/helper/test-path-walk.c create mode 100644 t/helper/test-pcre2-config.c create mode 100644 t/helper/test-pkt-line.c create mode 100644 t/helper/test-proc-receive.c create mode 100644 t/helper/test-progress.c create mode 100644 t/helper/test-reach.c create mode 100644 t/helper/test-read-cache.c create mode 100644 t/helper/test-read-graph.c create mode 100644 t/helper/test-read-midx.c create mode 100644 t/helper/test-ref-store.c create mode 100644 t/helper/test-reftable.c create mode 100644 t/helper/test-regex.c create mode 100644 t/helper/test-repository.c create mode 100644 t/helper/test-revision-walking.c create mode 100644 t/helper/test-rot13-filter.c create mode 100644 t/helper/test-run-command.c create mode 100644 t/helper/test-scrap-cache-tree.c create mode 100644 t/helper/test-serve-v2.c create mode 100644 t/helper/test-sha1.c create mode 100755 t/helper/test-sha1.sh create mode 100644 t/helper/test-sha256.c create mode 100644 t/helper/test-sigchain.c create mode 100644 t/helper/test-simple-ipc.c create mode 100644 t/helper/test-string-list.c create mode 100644 t/helper/test-submodule-config.c create mode 100644 t/helper/test-submodule-nested-repo-config.c create mode 100644 t/helper/test-submodule.c create mode 100644 t/helper/test-subprocess.c create mode 100644 t/helper/test-tool-utils.h create mode 100644 t/helper/test-tool.c create mode 100644 t/helper/test-tool.h create mode 100644 t/helper/test-trace2.c create mode 100644 t/helper/test-truncate.c create mode 100644 t/helper/test-userdiff.c create mode 100644 t/helper/test-wildmatch.c create mode 100644 t/helper/test-windows-named-pipe.c create mode 100644 t/helper/test-write-cache.c create mode 100644 t/helper/test-xml-encode.c create mode 100644 t/interop/.gitignore create mode 100644 t/interop/Makefile create mode 100644 t/interop/README create mode 100755 t/interop/i0000-basic.sh create mode 100755 t/interop/i5500-git-daemon.sh create mode 100755 t/interop/i5700-protocol-transition.sh create mode 100644 t/interop/interop-lib.sh create mode 100644 t/lib-bash.sh create mode 100644 t/lib-bitmap.sh create mode 100644 t/lib-bundle-uri-protocol.sh create mode 100644 t/lib-bundle.sh create mode 100644 t/lib-chunk.sh create mode 100644 t/lib-chunk/corrupt-chunk-file.pl create mode 100755 t/lib-commit-graph.sh create mode 100644 t/lib-credential.sh create mode 100644 t/lib-cvs.sh create mode 100644 t/lib-diff-alternative.sh create mode 100644 t/lib-diff-data.sh create mode 100644 t/lib-diff.sh create mode 100644 t/lib-encoding.sh create mode 100644 t/lib-gettext.sh create mode 100644 t/lib-git-daemon.sh create mode 100644 t/lib-git-p4.sh create mode 100644 t/lib-git-svn.sh create mode 100644 t/lib-gitweb.sh create mode 100644 t/lib-gpg.sh create mode 100644 t/lib-gpg/gpgsm-gen-key.in create mode 100644 t/lib-gpg/gpgsm_cert.p12 create mode 100644 t/lib-gpg/keyring.gpg create mode 100644 t/lib-gpg/ownertrust create mode 100644 t/lib-httpd.sh create mode 100644 t/lib-httpd/apache.conf create mode 100644 t/lib-httpd/apply-one-time-perl.sh create mode 100644 t/lib-httpd/broken-smart-http.sh create mode 100644 t/lib-httpd/error-no-report.sh create mode 100644 t/lib-httpd/error-smart-http.sh create mode 100755 t/lib-httpd/error.sh create mode 100644 t/lib-httpd/incomplete-body-upload-pack-v2-http.sh create mode 100644 t/lib-httpd/incomplete-length-upload-pack-v2-http.sh create mode 100644 t/lib-httpd/nph-custom-auth.sh create mode 100644 t/lib-httpd/passwd create mode 100644 t/lib-httpd/proxy-passwd create mode 100644 t/lib-httpd/ssl.cnf create mode 100644 t/lib-log-graph.sh create mode 100644 t/lib-merge.sh create mode 100644 t/lib-midx.sh create mode 100644 t/lib-pack.sh create mode 100644 t/lib-pager.sh create mode 100644 t/lib-parallel-checkout.sh create mode 100644 t/lib-patch-mode.sh create mode 100644 t/lib-perl.sh create mode 100644 t/lib-proto-disable.sh create mode 100644 t/lib-read-tree-m-3way.sh create mode 100644 t/lib-read-tree.sh create mode 100644 t/lib-rebase.sh create mode 100644 t/lib-submodule-update.sh create mode 100644 t/lib-subtest.sh create mode 100644 t/lib-sudo.sh create mode 100644 t/lib-t3100.sh create mode 100644 t/lib-t6000.sh create mode 100644 t/lib-terminal.sh create mode 100755 t/lib-unicode-nfc-nfd.sh create mode 100644 t/lib-unique-files.sh create mode 100644 t/meson.build create mode 100644 t/oid-info/README create mode 100644 t/oid-info/hash-info create mode 100644 t/oid-info/oid create mode 100644 t/perf/.gitignore create mode 100644 t/perf/Makefile create mode 100644 t/perf/README create mode 100755 t/perf/aggregate.perl create mode 100755 t/perf/bisect_regression create mode 100755 t/perf/bisect_run_script create mode 100644 t/perf/config create mode 100644 t/perf/lib-bitmap.sh create mode 100644 t/perf/lib-pack.sh create mode 100755 t/perf/min_time.perl create mode 100755 t/perf/p0000-perf-lib-sanity.sh create mode 100755 t/perf/p0001-rev-list.sh create mode 100755 t/perf/p0002-read-cache.sh create mode 100755 t/perf/p0003-delta-base-cache.sh create mode 100755 t/perf/p0004-lazy-init-name-hash.sh create mode 100755 t/perf/p0005-status.sh create mode 100755 t/perf/p0006-read-tree-checkout.sh create mode 100755 t/perf/p0007-write-cache.sh create mode 100755 t/perf/p0008-odb-fsync.sh create mode 100755 t/perf/p0071-sort.sh create mode 100755 t/perf/p0090-cache-tree.sh create mode 100755 t/perf/p0100-globbing.sh create mode 100755 t/perf/p1006-cat-file.sh create mode 100755 t/perf/p1400-update-ref.sh create mode 100755 t/perf/p1450-fsck.sh create mode 100755 t/perf/p1451-fsck-skip-list.sh create mode 100755 t/perf/p1500-graph-walks.sh create mode 100755 t/perf/p2000-sparse-operations.sh create mode 100755 t/perf/p3400-rebase.sh create mode 100755 t/perf/p3404-rebase-interactive.sh create mode 100755 t/perf/p4000-diff-algorithms.sh create mode 100755 t/perf/p4001-diff-no-index.sh create mode 100755 t/perf/p4002-diff-color-moved.sh create mode 100755 t/perf/p4205-log-pretty-formats.sh create mode 100755 t/perf/p4209-pickaxe.sh create mode 100755 t/perf/p4211-line-log.sh create mode 100755 t/perf/p4220-log-grep-engines.sh create mode 100755 t/perf/p4221-log-grep-engines-fixed.sh create mode 100755 t/perf/p5302-pack-index.sh create mode 100755 t/perf/p5303-many-packs.sh create mode 100755 t/perf/p5304-prune.sh create mode 100755 t/perf/p5310-pack-bitmaps.sh create mode 100755 t/perf/p5311-pack-bitmaps-fetch.sh create mode 100755 t/perf/p5312-pack-bitmaps-revs.sh create mode 100755 t/perf/p5326-multi-pack-bitmaps.sh create mode 100755 t/perf/p5332-multi-pack-reuse.sh create mode 100755 t/perf/p5333-pseudo-merge-bitmaps.sh create mode 100755 t/perf/p5550-fetch-tags.sh create mode 100755 t/perf/p5551-fetch-rescan.sh create mode 100755 t/perf/p5600-partial-clone.sh create mode 100755 t/perf/p5601-clone-reference.sh create mode 100755 t/perf/p6100-describe.sh create mode 100755 t/perf/p6300-for-each-ref.sh create mode 100755 t/perf/p7000-filter-branch.sh create mode 100755 t/perf/p7102-reset.sh create mode 100755 t/perf/p7300-clean.sh create mode 100755 t/perf/p7519-fsmonitor.sh create mode 100755 t/perf/p7527-builtin-fsmonitor.sh create mode 100755 t/perf/p7810-grep.sh create mode 100755 t/perf/p7820-grep-engines.sh create mode 100755 t/perf/p7821-grep-engines-fixed.sh create mode 100755 t/perf/p7822-grep-perl-character.sh create mode 100755 t/perf/p9210-scalar.sh create mode 100755 t/perf/p9300-fast-import-export.sh create mode 100644 t/perf/perf-lib.sh create mode 100644 t/perf/repos/.gitignore create mode 100755 t/perf/repos/inflate-repo.sh create mode 100755 t/perf/repos/many-files.sh create mode 100755 t/perf/run create mode 100755 t/run-test.sh create mode 100644 t/socks4-proxy.pl create mode 100755 t/t0000-basic.sh create mode 100755 t/t0001-init.sh create mode 100755 t/t0002-gitfile.sh create mode 100755 t/t0003-attributes.sh create mode 100755 t/t0004-unwritable.sh create mode 100755 t/t0005-signals.sh create mode 100755 t/t0006-date.sh create mode 100755 t/t0007-git-var.sh create mode 100755 t/t0008-ignores.sh create mode 100755 t/t0010-racy-git.sh create mode 100755 t/t0012-help.sh create mode 100755 t/t0013-sha1dc.sh create mode 100644 t/t0013/shattered-1.pdf create mode 100755 t/t0014-alias.sh create mode 100755 t/t0017-env-helper.sh create mode 100755 t/t0018-advice.sh create mode 100755 t/t0019-json-writer.sh create mode 100644 t/t0019/parse_json.perl create mode 100755 t/t0020-crlf.sh create mode 100755 t/t0021-conversion.sh create mode 100755 t/t0022-crlf-rename.sh create mode 100755 t/t0023-crlf-am.sh create mode 100755 t/t0024-crlf-archive.sh create mode 100755 t/t0025-crlf-renormalize.sh create mode 100755 t/t0026-eol-config.sh create mode 100755 t/t0027-auto-crlf.sh create mode 100755 t/t0028-working-tree-encoding.sh create mode 100755 t/t0029-core-unsetenvvars.sh create mode 100755 t/t0030-stripspace.sh create mode 100755 t/t0033-safe-directory.sh create mode 100755 t/t0034-root-safe-directory.sh create mode 100755 t/t0035-safe-bare-repository.sh create mode 100755 t/t0040-parse-options.sh create mode 100755 t/t0041-usage.sh create mode 100755 t/t0050-filesystem.sh create mode 100755 t/t0051-windows-named-pipe.sh create mode 100755 t/t0052-simple-ipc.sh create mode 100755 t/t0055-beyond-symlinks.sh create mode 100755 t/t0056-git-C.sh create mode 100755 t/t0060-path-utils.sh create mode 100755 t/t0061-run-command.sh create mode 100755 t/t0062-revision-walking.sh create mode 100755 t/t0063-string-list.sh create mode 100755 t/t0066-dir-iterator.sh create mode 100755 t/t0067-parse_pathspec_file.sh create mode 100755 t/t0068-for-each-repo.sh create mode 100755 t/t0070-fundamental.sh create mode 100755 t/t0071-sort.sh create mode 100755 t/t0080-unit-test-output.sh create mode 100755 t/t0081-find-pack.sh create mode 100755 t/t0090-cache-tree.sh create mode 100755 t/t0091-bugreport.sh create mode 100755 t/t0092-diagnose.sh create mode 100755 t/t0095-bloom.sh create mode 100755 t/t0100-previous.sh create mode 100755 t/t0101-at-syntax.sh create mode 100755 t/t0200-gettext-basic.sh create mode 100644 t/t0200/test.c create mode 100644 t/t0200/test.perl create mode 100644 t/t0200/test.sh create mode 100755 t/t0201-gettext-fallbacks.sh create mode 100755 t/t0202-gettext-perl.sh create mode 100755 t/t0202/test.pl create mode 100755 t/t0203-gettext-setlocale-sanity.sh create mode 100755 t/t0204-gettext-reencode-sanity.sh create mode 100755 t/t0210-trace2-normal.sh create mode 100644 t/t0210/scrub_normal.perl create mode 100755 t/t0211-trace2-perf.sh create mode 100644 t/t0211/scrub_perf.perl create mode 100755 t/t0212-trace2-event.sh create mode 100644 t/t0212/parse_events.perl create mode 100755 t/t0300-credentials.sh create mode 100755 t/t0301-credential-cache.sh create mode 100755 t/t0302-credential-store.sh create mode 100755 t/t0303-credential-external.sh create mode 100755 t/t0410-partial-clone.sh create mode 100755 t/t0411-clone-from-partial.sh create mode 100755 t/t0450-txt-doc-vs-help.sh create mode 100644 t/t0450/txt-help-mismatches create mode 100755 t/t0500-progress-display.sh create mode 100755 t/t0600-reffiles-backend.sh create mode 100755 t/t0601-reffiles-pack-refs.sh create mode 100755 t/t0602-reffiles-fsck.sh create mode 100755 t/t0610-reftable-basics.sh create mode 100755 t/t0611-reftable-httpd.sh create mode 100755 t/t0612-reftable-jgit-compatibility.sh create mode 100755 t/t0613-reftable-write-options.sh create mode 100755 t/t1000-read-tree-m-3way.sh create mode 100755 t/t1001-read-tree-m-2way.sh create mode 100755 t/t1002-read-tree-m-u-2way.sh create mode 100755 t/t1003-read-tree-prefix.sh create mode 100755 t/t1004-read-tree-m-u-wf.sh create mode 100755 t/t1005-read-tree-reset.sh create mode 100755 t/t1006-cat-file.sh create mode 100755 t/t1007-hash-object.sh create mode 100755 t/t1008-read-tree-overlay.sh create mode 100755 t/t1009-read-tree-new-index.sh create mode 100755 t/t1010-mktree.sh create mode 100755 t/t1011-read-tree-sparse-checkout.sh create mode 100755 t/t1012-read-tree-df.sh create mode 100755 t/t1013-read-tree-submodule.sh create mode 100755 t/t1014-read-tree-confusing.sh create mode 100755 t/t1015-read-index-unmerged.sh create mode 100755 t/t1016-compatObjectFormat.sh create mode 100755 t/t1016/gpg create mode 100755 t/t1020-subdirectory.sh create mode 100755 t/t1021-rerere-in-workdir.sh create mode 100755 t/t1022-read-tree-partial-clone.sh create mode 100755 t/t1050-large.sh create mode 100755 t/t1051-large-conversion.sh create mode 100755 t/t1060-object-corruption.sh create mode 100755 t/t1090-sparse-checkout-scope.sh create mode 100755 t/t1091-sparse-checkout-builtin.sh create mode 100755 t/t1092-sparse-checkout-compatibility.sh create mode 100755 t/t1100-commit-tree-options.sh create mode 100755 t/t1300-config.sh create mode 100755 t/t1301-shared-repo.sh create mode 100755 t/t1302-repo-version.sh create mode 100755 t/t1303-wacky-config.sh create mode 100755 t/t1304-default-acl.sh create mode 100755 t/t1305-config-include.sh create mode 100755 t/t1306-xdg-files.sh create mode 100755 t/t1307-config-blob.sh create mode 100755 t/t1308-config-set.sh create mode 100755 t/t1309-early-config.sh create mode 100755 t/t1310-config-default.sh create mode 100755 t/t1350-config-hooks-path.sh create mode 100755 t/t1400-update-ref.sh create mode 100755 t/t1401-symbolic-ref.sh create mode 100755 t/t1402-check-ref-format.sh create mode 100755 t/t1403-show-ref.sh create mode 100755 t/t1404-update-ref-errors.sh create mode 100755 t/t1405-main-ref-store.sh create mode 100755 t/t1406-submodule-ref-store.sh create mode 100755 t/t1407-worktree-ref-store.sh create mode 100755 t/t1408-packed-refs.sh create mode 100755 t/t1409-avoid-packing-refs.sh create mode 100755 t/t1410-reflog.sh create mode 100755 t/t1411-reflog-show.sh create mode 100755 t/t1412-reflog-loop.sh create mode 100755 t/t1413-reflog-detach.sh create mode 100755 t/t1414-reflog-walk.sh create mode 100755 t/t1415-worktree-refs.sh create mode 100755 t/t1416-ref-transaction-hooks.sh create mode 100755 t/t1417-reflog-updateref.sh create mode 100755 t/t1418-reflog-exists.sh create mode 100755 t/t1419-exclude-refs.sh create mode 100755 t/t1420-lost-found.sh create mode 100755 t/t1430-bad-ref-name.sh create mode 100755 t/t1450-fsck.sh create mode 100755 t/t1451-fsck-buffer.sh create mode 100755 t/t1460-refs-migrate.sh create mode 100755 t/t1500-rev-parse.sh create mode 100755 t/t1501-work-tree.sh create mode 100755 t/t1502-rev-parse-parseopt.sh create mode 100644 t/t1502/.gitattributes create mode 100644 t/t1502/optionspec-neg create mode 100644 t/t1502/optionspec-neg.help create mode 100755 t/t1502/optionspec.help create mode 100755 t/t1503-rev-parse-verify.sh create mode 100755 t/t1504-ceiling-dirs.sh create mode 100755 t/t1505-rev-parse-last.sh create mode 100755 t/t1506-rev-parse-diagnosis.sh create mode 100755 t/t1507-rev-parse-upstream.sh create mode 100755 t/t1508-at-combinations.sh create mode 100755 t/t1509-root-work-tree.sh create mode 100644 t/t1509/excludes create mode 100755 t/t1509/prepare-chroot.sh create mode 100755 t/t1510-repo-setup.sh create mode 100755 t/t1511-rev-parse-caret.sh create mode 100755 t/t1512-rev-parse-disambiguation.sh create mode 100755 t/t1513-rev-parse-prefix.sh create mode 100755 t/t1514-rev-parse-push.sh create mode 100755 t/t1515-rev-parse-outside-repo.sh create mode 100755 t/t1517-outside-repo.sh create mode 100755 t/t1600-index.sh create mode 100755 t/t1601-index-bogus.sh create mode 100755 t/t1700-split-index.sh create mode 100755 t/t1701-racy-split-index.sh create mode 100755 t/t1800-hook.sh create mode 100755 t/t2000-conflict-when-checking-files-out.sh create mode 100755 t/t2002-checkout-cache-u.sh create mode 100755 t/t2003-checkout-cache-mkdir.sh create mode 100755 t/t2004-checkout-cache-temp.sh create mode 100755 t/t2005-checkout-index-symlinks.sh create mode 100755 t/t2006-checkout-index-basic.sh create mode 100755 t/t2007-checkout-symlink.sh create mode 100755 t/t2008-checkout-subdir.sh create mode 100755 t/t2009-checkout-statinfo.sh create mode 100755 t/t2010-checkout-ambiguous.sh create mode 100755 t/t2011-checkout-invalid-head.sh create mode 100755 t/t2012-checkout-last.sh create mode 100755 t/t2013-checkout-submodule.sh create mode 100755 t/t2014-checkout-switch.sh create mode 100755 t/t2015-checkout-unborn.sh create mode 100755 t/t2016-checkout-patch.sh create mode 100755 t/t2017-checkout-orphan.sh create mode 100755 t/t2018-checkout-branch.sh create mode 100755 t/t2019-checkout-ambiguous-ref.sh create mode 100755 t/t2020-checkout-detach.sh create mode 100755 t/t2021-checkout-overwrite.sh create mode 100755 t/t2022-checkout-paths.sh create mode 100755 t/t2023-checkout-m.sh create mode 100755 t/t2024-checkout-dwim.sh create mode 100755 t/t2025-checkout-no-overlay.sh create mode 100755 t/t2026-checkout-pathspec-file.sh create mode 100755 t/t2027-checkout-track.sh create mode 100755 t/t2030-unresolve-info.sh create mode 100755 t/t2050-git-dir-relative.sh create mode 100755 t/t2060-switch.sh create mode 100755 t/t2070-restore.sh create mode 100755 t/t2071-restore-patch.sh create mode 100755 t/t2072-restore-pathspec-file.sh create mode 100755 t/t2080-parallel-checkout-basics.sh create mode 100755 t/t2081-parallel-checkout-collisions.sh create mode 100755 t/t2082-parallel-checkout-attributes.sh create mode 100755 t/t2100-update-cache-badpath.sh create mode 100755 t/t2101-update-index-reupdate.sh create mode 100755 t/t2102-update-index-symlinks.sh create mode 100755 t/t2103-update-index-ignore-missing.sh create mode 100755 t/t2104-update-index-skip-worktree.sh create mode 100755 t/t2105-update-index-gitfile.sh create mode 100755 t/t2106-update-index-assume-unchanged.sh create mode 100755 t/t2107-update-index-basic.sh create mode 100755 t/t2108-update-index-refresh-racy.sh create mode 100755 t/t2200-add-update.sh create mode 100755 t/t2201-add-update-typechange.sh create mode 100755 t/t2202-add-addremove.sh create mode 100755 t/t2203-add-intent.sh create mode 100755 t/t2204-add-ignored.sh create mode 100755 t/t2205-add-worktree-config.sh create mode 100755 t/t2300-cd-to-toplevel.sh create mode 100755 t/t2400-worktree-add.sh create mode 100755 t/t2401-worktree-prune.sh create mode 100755 t/t2402-worktree-list.sh create mode 100755 t/t2403-worktree-move.sh create mode 100755 t/t2404-worktree-config.sh create mode 100755 t/t2405-worktree-submodule.sh create mode 100755 t/t2406-worktree-repair.sh create mode 100755 t/t2407-worktree-heads.sh create mode 100755 t/t2500-untracked-overwriting.sh create mode 100755 t/t2501-cwd-empty.sh create mode 100755 t/t3000-ls-files-others.sh create mode 100755 t/t3001-ls-files-others-exclude.sh create mode 100755 t/t3002-ls-files-dashpath.sh create mode 100755 t/t3003-ls-files-exclude.sh create mode 100755 t/t3004-ls-files-basic.sh create mode 100755 t/t3005-ls-files-relative.sh create mode 100755 t/t3006-ls-files-long.sh create mode 100755 t/t3007-ls-files-recurse-submodules.sh create mode 100755 t/t3008-ls-files-lazy-init-name-hash.sh create mode 100755 t/t3009-ls-files-others-nonsubmodule.sh create mode 100755 t/t3010-ls-files-killed-modified.sh create mode 100755 t/t3011-common-prefixes-and-directory-traversal.sh create mode 100755 t/t3012-ls-files-dedup.sh create mode 100755 t/t3013-ls-files-format.sh create mode 100755 t/t3020-ls-files-error-unmatch.sh create mode 100755 t/t3040-subprojects-basic.sh create mode 100755 t/t3050-subprojects-fetch.sh create mode 100755 t/t3060-ls-files-with-tree.sh create mode 100755 t/t3070-wildmatch.sh create mode 100755 t/t3100-ls-tree-restrict.sh create mode 100755 t/t3101-ls-tree-dirname.sh create mode 100755 t/t3102-ls-tree-wildcards.sh create mode 100755 t/t3103-ls-tree-misc.sh create mode 100755 t/t3104-ls-tree-format.sh create mode 100755 t/t3105-ls-tree-output.sh create mode 100755 t/t3200-branch.sh create mode 100755 t/t3201-branch-contains.sh create mode 100755 t/t3202-show-branch.sh create mode 100755 t/t3203-branch-output.sh create mode 100755 t/t3204-branch-name-interpretation.sh create mode 100755 t/t3205-branch-color.sh create mode 100755 t/t3206-range-diff.sh create mode 100644 t/t3206/history.export create mode 100755 t/t3207-branch-submodule.sh create mode 100755 t/t3211-peel-ref.sh create mode 100755 t/t3300-funny-names.sh create mode 100755 t/t3301-notes.sh create mode 100755 t/t3302-notes-index-expensive.sh create mode 100755 t/t3303-notes-subtrees.sh create mode 100755 t/t3304-notes-mixed.sh create mode 100755 t/t3305-notes-fanout.sh create mode 100755 t/t3306-notes-prune.sh create mode 100755 t/t3307-notes-man.sh create mode 100755 t/t3308-notes-merge.sh create mode 100755 t/t3309-notes-merge-auto-resolve.sh create mode 100755 t/t3310-notes-merge-manual-resolve.sh create mode 100755 t/t3311-notes-merge-fanout.sh create mode 100755 t/t3320-notes-merge-worktrees.sh create mode 100755 t/t3321-notes-stripspace.sh create mode 100755 t/t3400-rebase.sh create mode 100755 t/t3401-rebase-and-am-rename.sh create mode 100755 t/t3402-rebase-merge.sh create mode 100755 t/t3403-rebase-skip.sh create mode 100755 t/t3404-rebase-interactive.sh create mode 100755 t/t3405-rebase-malformed.sh create mode 100755 t/t3406-rebase-message.sh create mode 100755 t/t3407-rebase-abort.sh create mode 100755 t/t3408-rebase-multi-line.sh create mode 100755 t/t3409-rebase-environ.sh create mode 100755 t/t3412-rebase-root.sh create mode 100755 t/t3413-rebase-hook.sh create mode 100755 t/t3415-rebase-autosquash.sh create mode 100755 t/t3416-rebase-onto-threedots.sh create mode 100755 t/t3417-rebase-whitespace-fix.sh create mode 100755 t/t3418-rebase-continue.sh create mode 100755 t/t3419-rebase-patch-id.sh create mode 100755 t/t3420-rebase-autostash.sh create mode 100755 t/t3421-rebase-topology-linear.sh create mode 100755 t/t3422-rebase-incompatible-options.sh create mode 100755 t/t3423-rebase-reword.sh create mode 100755 t/t3424-rebase-empty.sh create mode 100755 t/t3425-rebase-topology-merges.sh create mode 100755 t/t3426-rebase-submodule.sh create mode 100755 t/t3427-rebase-subtree.sh create mode 100755 t/t3428-rebase-signoff.sh create mode 100755 t/t3429-rebase-edit-todo.sh create mode 100755 t/t3430-rebase-merges.sh create mode 100755 t/t3431-rebase-fork-point.sh create mode 100755 t/t3432-rebase-fast-forward.sh create mode 100755 t/t3433-rebase-across-mode-change.sh create mode 100755 t/t3434-rebase-i18n.sh create mode 100644 t/t3434/ISO8859-1.txt create mode 100644 t/t3434/eucJP.txt create mode 100755 t/t3435-rebase-gpg-sign.sh create mode 100755 t/t3436-rebase-more-options.sh create mode 100755 t/t3437-rebase-fixup-options.sh create mode 100644 t/t3437/expected-combined-message create mode 100644 t/t3437/expected-squash-message create mode 100755 t/t3438-rebase-broken-files.sh create mode 100755 t/t3500-cherry.sh create mode 100755 t/t3501-revert-cherry-pick.sh create mode 100755 t/t3502-cherry-pick-merge.sh create mode 100755 t/t3503-cherry-pick-root.sh create mode 100755 t/t3504-cherry-pick-rerere.sh create mode 100755 t/t3505-cherry-pick-empty.sh create mode 100755 t/t3506-cherry-pick-ff.sh create mode 100755 t/t3507-cherry-pick-conflict.sh create mode 100755 t/t3508-cherry-pick-many-commits.sh create mode 100755 t/t3509-cherry-pick-merge-df.sh create mode 100755 t/t3510-cherry-pick-sequence.sh create mode 100755 t/t3511-cherry-pick-x.sh create mode 100755 t/t3512-cherry-pick-submodule.sh create mode 100755 t/t3513-revert-submodule.sh create mode 100755 t/t3514-cherry-pick-revert-gpg.sh create mode 100755 t/t3600-rm.sh create mode 100755 t/t3601-rm-pathspec-file.sh create mode 100755 t/t3602-rm-sparse-checkout.sh create mode 100755 t/t3650-replay-basics.sh create mode 100755 t/t3700-add.sh create mode 100755 t/t3701-add-interactive.sh create mode 100755 t/t3702-add-edit.sh create mode 100755 t/t3703-add-magic-pathspec.sh create mode 100755 t/t3704-add-pathspec-file.sh create mode 100755 t/t3705-add-sparse-checkout.sh create mode 100755 t/t3800-mktag.sh create mode 100755 t/t3900-i18n-commit.sh create mode 100644 t/t3900/1-UTF-8.txt create mode 100644 t/t3900/2-UTF-8.txt create mode 100644 t/t3900/ISO-2022-JP.txt create mode 100644 t/t3900/ISO8859-1.txt create mode 100644 t/t3900/UTF-16.txt create mode 100644 t/t3900/eucJP.txt create mode 100755 t/t3901-i18n-patch.sh create mode 100755 t/t3901/8859-1.txt create mode 100755 t/t3901/utf8.txt create mode 100755 t/t3902-quoted.sh create mode 100755 t/t3903-stash.sh create mode 100755 t/t3904-stash-patch.sh create mode 100755 t/t3905-stash-include-untracked.sh create mode 100755 t/t3906-stash-submodule.sh create mode 100755 t/t3907-stash-show-config.sh create mode 100755 t/t3908-stash-in-worktree.sh create mode 100755 t/t3909-stash-pathspec-file.sh create mode 100755 t/t3910-mac-os-precompose.sh create mode 100755 t/t3920-crlf-messages.sh create mode 100755 t/t4000-diff-format.sh create mode 100755 t/t4001-diff-rename.sh create mode 100755 t/t4002-diff-basic.sh create mode 100755 t/t4003-diff-rename-1.sh create mode 100755 t/t4004-diff-rename-symlink.sh create mode 100755 t/t4005-diff-rename-2.sh create mode 100755 t/t4006-diff-mode.sh create mode 100755 t/t4007-rename-3.sh create mode 100755 t/t4008-diff-break-rewrite.sh create mode 100755 t/t4009-diff-rename-4.sh create mode 100755 t/t4010-diff-pathspec.sh create mode 100755 t/t4011-diff-symlink.sh create mode 100755 t/t4012-diff-binary.sh create mode 100755 t/t4013-diff-various.sh create mode 100644 t/t4013/diff.config_format.subjectprefix_DIFFERENT_PREFIX create mode 100644 t/t4013/diff.diff-tree_--cc_--patch-with-stat_--summary_master create mode 100644 t/t4013/diff.diff-tree_--cc_--patch-with-stat_--summary_side create mode 100644 t/t4013/diff.diff-tree_--cc_--patch-with-stat_master create mode 100644 t/t4013/diff.diff-tree_--cc_--shortstat_master create mode 100644 t/t4013/diff.diff-tree_--cc_--stat_--summary_master create mode 100644 t/t4013/diff.diff-tree_--cc_--stat_--summary_side create mode 100644 t/t4013/diff.diff-tree_--cc_--stat_master create mode 100644 t/t4013/diff.diff-tree_--cc_--summary_REVERSE create mode 100644 t/t4013/diff.diff-tree_--cc_master create mode 100644 t/t4013/diff.diff-tree_--format=%N_note create mode 100644 t/t4013/diff.diff-tree_--patch-with-raw_initial create mode 100644 t/t4013/diff.diff-tree_--patch-with-stat_initial create mode 100644 t/t4013/diff.diff-tree_--pretty=oneline_--patch-with-raw_initial create mode 100644 t/t4013/diff.diff-tree_--pretty=oneline_--patch-with-stat_initial create mode 100644 t/t4013/diff.diff-tree_--pretty=oneline_--root_--patch-with-raw_initial create mode 100644 t/t4013/diff.diff-tree_--pretty=oneline_--root_--patch-with-stat_initial create mode 100644 t/t4013/diff.diff-tree_--pretty=oneline_--root_-p_initial create mode 100644 t/t4013/diff.diff-tree_--pretty=oneline_--root_initial create mode 100644 t/t4013/diff.diff-tree_--pretty=oneline_-p_initial create mode 100644 t/t4013/diff.diff-tree_--pretty=oneline_initial create mode 100644 t/t4013/diff.diff-tree_--pretty_--notes_note create mode 100644 t/t4013/diff.diff-tree_--pretty_--patch-with-raw_initial create mode 100644 t/t4013/diff.diff-tree_--pretty_--patch-with-stat_initial create mode 100644 t/t4013/diff.diff-tree_--pretty_--patch-with-stat_side create mode 100644 t/t4013/diff.diff-tree_--pretty_--root_--patch-with-raw_initial create mode 100644 t/t4013/diff.diff-tree_--pretty_--root_--patch-with-stat_initial create mode 100644 t/t4013/diff.diff-tree_--pretty_--root_--stat_--compact-summary_initial create mode 100644 t/t4013/diff.diff-tree_--pretty_--root_--stat_--summary_initial create mode 100644 t/t4013/diff.diff-tree_--pretty_--root_--stat_initial create mode 100644 t/t4013/diff.diff-tree_--pretty_--root_--summary_-r_initial create mode 100644 t/t4013/diff.diff-tree_--pretty_--root_--summary_initial create mode 100644 t/t4013/diff.diff-tree_--pretty_--root_-p_initial create mode 100644 t/t4013/diff.diff-tree_--pretty_--root_initial create mode 100644 t/t4013/diff.diff-tree_--pretty_--stat_--summary_initial create mode 100644 t/t4013/diff.diff-tree_--pretty_--stat_initial create mode 100644 t/t4013/diff.diff-tree_--pretty_--summary_initial create mode 100644 t/t4013/diff.diff-tree_--pretty_-R_--root_--stat_--compact-summary_initial create mode 100644 t/t4013/diff.diff-tree_--pretty_-p_initial create mode 100644 t/t4013/diff.diff-tree_--pretty_-p_side create mode 100644 t/t4013/diff.diff-tree_--pretty_initial create mode 100644 t/t4013/diff.diff-tree_--pretty_note create mode 100644 t/t4013/diff.diff-tree_--pretty_side create mode 100644 t/t4013/diff.diff-tree_--root_--abbrev_initial create mode 100644 t/t4013/diff.diff-tree_--root_--patch-with-raw_initial create mode 100644 t/t4013/diff.diff-tree_--root_--patch-with-stat_initial create mode 100644 t/t4013/diff.diff-tree_--root_-p_--abbrev=10_initial create mode 100644 t/t4013/diff.diff-tree_--root_-p_--full-index_--abbrev=10_initial create mode 100644 t/t4013/diff.diff-tree_--root_-p_--full-index_initial create mode 100644 t/t4013/diff.diff-tree_--root_-p_initial create mode 100644 t/t4013/diff.diff-tree_--root_-r_--abbrev=4_initial create mode 100644 t/t4013/diff.diff-tree_--root_-r_--abbrev_initial create mode 100644 t/t4013/diff.diff-tree_--root_-r_initial create mode 100644 t/t4013/diff.diff-tree_--root_initial create mode 100644 t/t4013/diff.diff-tree_--stat_--compact-summary_initial_mode create mode 100644 t/t4013/diff.diff-tree_--stat_initial_mode create mode 100644 t/t4013/diff.diff-tree_--summary_initial_mode create mode 100644 t/t4013/diff.diff-tree_-R_--stat_--compact-summary_initial_mode create mode 100644 t/t4013/diff.diff-tree_-c_--abbrev_master create mode 100644 t/t4013/diff.diff-tree_-c_--stat_--summary_master create mode 100644 t/t4013/diff.diff-tree_-c_--stat_--summary_side create mode 100644 t/t4013/diff.diff-tree_-c_--stat_master create mode 100644 t/t4013/diff.diff-tree_-c_master create mode 100644 t/t4013/diff.diff-tree_-m_master create mode 100644 t/t4013/diff.diff-tree_-p_-m_master create mode 100644 t/t4013/diff.diff-tree_-p_initial create mode 100644 t/t4013/diff.diff-tree_-p_master create mode 100644 t/t4013/diff.diff-tree_-r_--abbrev=4_initial create mode 100644 t/t4013/diff.diff-tree_-r_--abbrev_initial create mode 100644 t/t4013/diff.diff-tree_-r_initial create mode 100644 t/t4013/diff.diff-tree_initial create mode 100644 t/t4013/diff.diff-tree_initial_mode create mode 100644 t/t4013/diff.diff-tree_master create mode 100644 t/t4013/diff.diff_--abbrev_initial..side create mode 100644 t/t4013/diff.diff_--cached create mode 100644 t/t4013/diff.diff_--cached_--_file0 create mode 100644 t/t4013/diff.diff_--dirstat-by-file_initial_rearrange create mode 100644 t/t4013/diff.diff_--dirstat_--cc_master~1_master create mode 100644 t/t4013/diff.diff_--dirstat_initial_rearrange create mode 100644 t/t4013/diff.diff_--dirstat_master~1_master~2 create mode 100644 t/t4013/diff.diff_--line-prefix=abc_master_master^_side create mode 100644 t/t4013/diff.diff_--line-prefix_--cached_--_file0 create mode 100644 t/t4013/diff.diff_--name-status_dir2_dir create mode 100644 t/t4013/diff.diff_--no-index_--name-status_--_dir2_dir create mode 100644 t/t4013/diff.diff_--no-index_--name-status_dir2_dir create mode 100644 t/t4013/diff.diff_--no-index_--raw_--abbrev=4_dir2_dir create mode 100644 t/t4013/diff.diff_--no-index_--raw_--no-abbrev_dir2_dir create mode 100644 t/t4013/diff.diff_--no-index_--raw_dir2_dir create mode 100644 t/t4013/diff.diff_--no-index_dir_dir3 create mode 100644 t/t4013/diff.diff_--patch-with-raw_-r_initial..side create mode 100644 t/t4013/diff.diff_--patch-with-raw_initial..side create mode 100644 t/t4013/diff.diff_--patch-with-stat_-r_initial..side create mode 100644 t/t4013/diff.diff_--patch-with-stat_initial..side create mode 100644 t/t4013/diff.diff_--raw_--abbrev=4_initial create mode 100644 t/t4013/diff.diff_--raw_--no-abbrev_initial create mode 100644 t/t4013/diff.diff_--raw_initial create mode 100644 t/t4013/diff.diff_--stat_initial..side create mode 100644 t/t4013/diff.diff_-U1_initial..side create mode 100644 t/t4013/diff.diff_-U2_initial..side create mode 100644 t/t4013/diff.diff_-U_initial..side create mode 100644 t/t4013/diff.diff_-r_--stat_initial..side create mode 100644 t/t4013/diff.diff_-r_initial..side create mode 100644 t/t4013/diff.diff_initial..side create mode 100644 t/t4013/diff.diff_master_master^_side create mode 100644 t/t4013/diff.format-patch_--attach_--stdout_--suffix=.diff_initial..side create mode 100644 t/t4013/diff.format-patch_--attach_--stdout_initial..master create mode 100644 t/t4013/diff.format-patch_--attach_--stdout_initial..master^ create mode 100644 t/t4013/diff.format-patch_--attach_--stdout_initial..side create mode 100644 t/t4013/diff.format-patch_--inline_--stdout_--numbered-files_initial..master create mode 100644 t/t4013/diff.format-patch_--inline_--stdout_--subject-prefix=TESTCASE_initial..master create mode 100644 t/t4013/diff.format-patch_--inline_--stdout_initial..master create mode 100644 t/t4013/diff.format-patch_--inline_--stdout_initial..master^ create mode 100644 t/t4013/diff.format-patch_--inline_--stdout_initial..master^^ create mode 100644 t/t4013/diff.format-patch_--inline_--stdout_initial..side create mode 100644 t/t4013/diff.format-patch_--stdout_--cover-letter_-n_initial..master^ create mode 100644 t/t4013/diff.format-patch_--stdout_--no-numbered_initial..master create mode 100644 t/t4013/diff.format-patch_--stdout_--numbered_initial..master create mode 100644 t/t4013/diff.format-patch_--stdout_initial..master create mode 100644 t/t4013/diff.format-patch_--stdout_initial..master^ create mode 100644 t/t4013/diff.format-patch_--stdout_initial..side create mode 100644 t/t4013/diff.log_--cc_-m_-p_master create mode 100644 t/t4013/diff.log_--decorate=full_--all create mode 100644 t/t4013/diff.log_--decorate=full_--clear-decorations_--all create mode 100644 t/t4013/diff.log_--decorate=full_--decorate-all_--all create mode 100644 t/t4013/diff.log_--decorate_--all create mode 100644 t/t4013/diff.log_--decorate_--clear-decorations_--all create mode 100644 t/t4013/diff.log_--decorate_--decorate-all_--all create mode 100644 t/t4013/diff.log_--diff-merges=first-parent_master create mode 100644 t/t4013/diff.log_--diff-merges=off_-p_--first-parent_master create mode 100644 t/t4013/diff.log_--first-parent_--diff-merges=off_-p_master create mode 100644 t/t4013/diff.log_--no-diff-merges_-p_--first-parent_master create mode 100644 t/t4013/diff.log_--patch-with-stat_--summary_master_--_dir_ create mode 100644 t/t4013/diff.log_--patch-with-stat_master create mode 100644 t/t4013/diff.log_--patch-with-stat_master_--_dir_ create mode 100644 t/t4013/diff.log_--root_--cc_--patch-with-stat_--summary_master create mode 100644 t/t4013/diff.log_--root_--patch-with-stat_--summary_master create mode 100644 t/t4013/diff.log_--root_--patch-with-stat_master create mode 100644 t/t4013/diff.log_--root_-c_--patch-with-stat_--summary_master create mode 100644 t/t4013/diff.log_--root_-p_master create mode 100644 t/t4013/diff.log_--root_master create mode 100644 t/t4013/diff.log_-GF_-p_--pickaxe-all_master create mode 100644 t/t4013/diff.log_-GF_-p_master create mode 100644 t/t4013/diff.log_-GF_master create mode 100644 t/t4013/diff.log_-IA_-IB_-I1_-I2_-p_master create mode 100644 t/t4013/diff.log_-SF_-p_master create mode 100644 t/t4013/diff.log_-SF_master create mode 100644 t/t4013/diff.log_-SF_master_--max-count=0 create mode 100644 t/t4013/diff.log_-SF_master_--max-count=1 create mode 100644 t/t4013/diff.log_-SF_master_--max-count=2 create mode 100644 t/t4013/diff.log_-S_F_master create mode 100644 t/t4013/diff.log_-c_-m_-p_master create mode 100644 t/t4013/diff.log_-m_--raw_master create mode 100644 t/t4013/diff.log_-m_--stat_master create mode 100644 t/t4013/diff.log_-m_-p_--first-parent_master create mode 100644 t/t4013/diff.log_-m_-p_master create mode 100644 t/t4013/diff.log_-p_--diff-merges=first-parent_master create mode 100644 t/t4013/diff.log_-p_--first-parent_master create mode 100644 t/t4013/diff.log_-p_master create mode 100644 t/t4013/diff.log_master create mode 100644 t/t4013/diff.noellipses-diff-tree_--root_--abbrev_initial create mode 100644 t/t4013/diff.noellipses-diff-tree_--root_-r_--abbrev=4_initial create mode 100644 t/t4013/diff.noellipses-diff-tree_--root_-r_--abbrev_initial create mode 100644 t/t4013/diff.noellipses-diff-tree_-c_--abbrev_master create mode 100644 t/t4013/diff.noellipses-diff_--no-index_--raw_--abbrev=4_dir2_dir create mode 100644 t/t4013/diff.noellipses-diff_--no-index_--raw_dir2_dir create mode 100644 t/t4013/diff.noellipses-diff_--patch-with-raw_-r_initial..side create mode 100644 t/t4013/diff.noellipses-diff_--patch-with-raw_initial..side create mode 100644 t/t4013/diff.noellipses-diff_--raw_--abbrev=4_initial create mode 100644 t/t4013/diff.noellipses-diff_--raw_initial create mode 100644 t/t4013/diff.noellipses-show_--patch-with-raw_side create mode 100644 t/t4013/diff.noellipses-whatchanged_--root_master create mode 100644 t/t4013/diff.noellipses-whatchanged_-SF_master create mode 100644 t/t4013/diff.noellipses-whatchanged_master create mode 100644 t/t4013/diff.rev-list_--children_HEAD create mode 100644 t/t4013/diff.rev-list_--parents_HEAD create mode 100644 t/t4013/diff.show_--first-parent_master create mode 100644 t/t4013/diff.show_--patch-with-raw_side create mode 100644 t/t4013/diff.show_--patch-with-stat_--summary_side create mode 100644 t/t4013/diff.show_--patch-with-stat_side create mode 100644 t/t4013/diff.show_--root_initial create mode 100644 t/t4013/diff.show_--stat_--summary_side create mode 100644 t/t4013/diff.show_--stat_side create mode 100644 t/t4013/diff.show_-c_master create mode 100644 t/t4013/diff.show_-m_master create mode 100644 t/t4013/diff.show_initial create mode 100644 t/t4013/diff.show_master create mode 100644 t/t4013/diff.show_side create mode 100644 t/t4013/diff.whatchanged_--patch-with-stat_--summary_master_--_dir_ create mode 100644 t/t4013/diff.whatchanged_--patch-with-stat_master create mode 100644 t/t4013/diff.whatchanged_--patch-with-stat_master_--_dir_ create mode 100644 t/t4013/diff.whatchanged_--root_--cc_--patch-with-stat_--summary_master create mode 100644 t/t4013/diff.whatchanged_--root_--patch-with-stat_--summary_master create mode 100644 t/t4013/diff.whatchanged_--root_--patch-with-stat_master create mode 100644 t/t4013/diff.whatchanged_--root_-c_--patch-with-stat_--summary_master create mode 100644 t/t4013/diff.whatchanged_--root_-p_master create mode 100644 t/t4013/diff.whatchanged_--root_master create mode 100644 t/t4013/diff.whatchanged_-SF_-p_master create mode 100644 t/t4013/diff.whatchanged_-SF_master create mode 100644 t/t4013/diff.whatchanged_-p_master create mode 100644 t/t4013/diff.whatchanged_master create mode 100755 t/t4014-format-patch.sh create mode 100755 t/t4015-diff-whitespace.sh create mode 100755 t/t4016-diff-quote.sh create mode 100755 t/t4017-diff-retval.sh create mode 100755 t/t4018-diff-funcname.sh create mode 100644 t/t4018/README create mode 100644 t/t4018/bash-arithmetic-function create mode 100644 t/t4018/bash-bashism-style-compact create mode 100644 t/t4018/bash-bashism-style-function create mode 100644 t/t4018/bash-bashism-style-whitespace create mode 100644 t/t4018/bash-conditional-function create mode 100644 t/t4018/bash-missing-parentheses create mode 100644 t/t4018/bash-mixed-style-compact create mode 100644 t/t4018/bash-mixed-style-function create mode 100644 t/t4018/bash-nested-functions create mode 100644 t/t4018/bash-other-characters create mode 100644 t/t4018/bash-posix-style-compact create mode 100644 t/t4018/bash-posix-style-function create mode 100644 t/t4018/bash-posix-style-whitespace create mode 100644 t/t4018/bash-subshell-function create mode 100644 t/t4018/bash-trailing-comment create mode 100644 t/t4018/cpp-c++-function create mode 100644 t/t4018/cpp-class-constructor create mode 100644 t/t4018/cpp-class-constructor-mem-init create mode 100644 t/t4018/cpp-class-definition create mode 100644 t/t4018/cpp-class-definition-derived create mode 100644 t/t4018/cpp-class-destructor create mode 100644 t/t4018/cpp-function-returning-global-type create mode 100644 t/t4018/cpp-function-returning-nested create mode 100644 t/t4018/cpp-function-returning-pointer create mode 100644 t/t4018/cpp-function-returning-reference create mode 100644 t/t4018/cpp-gnu-style-function create mode 100644 t/t4018/cpp-namespace-definition create mode 100644 t/t4018/cpp-operator-definition create mode 100644 t/t4018/cpp-skip-access-specifiers create mode 100644 t/t4018/cpp-skip-comment-block create mode 100644 t/t4018/cpp-skip-labels create mode 100644 t/t4018/cpp-struct-definition create mode 100644 t/t4018/cpp-struct-single-line create mode 100644 t/t4018/cpp-template-function-definition create mode 100644 t/t4018/cpp-union-definition create mode 100644 t/t4018/cpp-void-c-function create mode 100644 t/t4018/csharp-exclude-assignments create mode 100644 t/t4018/csharp-exclude-control-statements create mode 100644 t/t4018/csharp-exclude-exceptions create mode 100644 t/t4018/csharp-exclude-generic-method-calls create mode 100644 t/t4018/csharp-exclude-init-dispose create mode 100644 t/t4018/csharp-exclude-iterations create mode 100644 t/t4018/csharp-exclude-method-calls create mode 100644 t/t4018/csharp-exclude-other create mode 100644 t/t4018/csharp-method create mode 100644 t/t4018/csharp-method-array create mode 100644 t/t4018/csharp-method-explicit create mode 100644 t/t4018/csharp-method-generics create mode 100644 t/t4018/csharp-method-generics-alternate-spaces create mode 100644 t/t4018/csharp-method-modifiers create mode 100644 t/t4018/csharp-method-multiline create mode 100644 t/t4018/csharp-method-params create mode 100644 t/t4018/csharp-method-special-chars create mode 100644 t/t4018/csharp-method-with-spacing create mode 100644 t/t4018/csharp-property create mode 100644 t/t4018/csharp-property-braces-same-line create mode 100644 t/t4018/css-attribute-value-selector create mode 100644 t/t4018/css-block-level-@-statements create mode 100644 t/t4018/css-brace-in-col-1 create mode 100644 t/t4018/css-class-selector create mode 100644 t/t4018/css-colon-eol create mode 100644 t/t4018/css-colon-selector create mode 100644 t/t4018/css-common create mode 100644 t/t4018/css-id-selector create mode 100644 t/t4018/css-long-selector-list create mode 100644 t/t4018/css-prop-sans-indent create mode 100644 t/t4018/css-root-selector create mode 100644 t/t4018/css-short-selector-list create mode 100644 t/t4018/css-trailing-space create mode 100644 t/t4018/custom1-pattern create mode 100644 t/t4018/custom2-match-to-end-of-line create mode 100644 t/t4018/custom3-alternation-in-pattern create mode 100644 t/t4018/dts-labels create mode 100644 t/t4018/dts-node-unitless create mode 100644 t/t4018/dts-nodes create mode 100644 t/t4018/dts-nodes-boolean-prop create mode 100644 t/t4018/dts-nodes-comment1 create mode 100644 t/t4018/dts-nodes-comment2 create mode 100644 t/t4018/dts-nodes-multiline-prop create mode 100644 t/t4018/dts-reference create mode 100644 t/t4018/dts-root create mode 100644 t/t4018/dts-root-comment create mode 100644 t/t4018/elixir-do-not-pick-end create mode 100644 t/t4018/elixir-ex-unit-test create mode 100644 t/t4018/elixir-function create mode 100644 t/t4018/elixir-macro create mode 100644 t/t4018/elixir-module create mode 100644 t/t4018/elixir-module-func create mode 100644 t/t4018/elixir-nested-module create mode 100644 t/t4018/elixir-private-function create mode 100644 t/t4018/elixir-protocol create mode 100644 t/t4018/elixir-protocol-implementation create mode 100644 t/t4018/fortran-block-data create mode 100644 t/t4018/fortran-comment create mode 100644 t/t4018/fortran-comment-keyword create mode 100644 t/t4018/fortran-comment-legacy create mode 100644 t/t4018/fortran-comment-legacy-star create mode 100644 t/t4018/fortran-external-function create mode 100644 t/t4018/fortran-external-subroutine create mode 100644 t/t4018/fortran-module create mode 100644 t/t4018/fortran-module-procedure create mode 100644 t/t4018/fortran-program create mode 100644 t/t4018/fountain-scene create mode 100644 t/t4018/golang-complex-function create mode 100644 t/t4018/golang-func create mode 100644 t/t4018/golang-interface create mode 100644 t/t4018/golang-long-func create mode 100644 t/t4018/golang-struct create mode 100644 t/t4018/java-class-brace-on-separate-line create mode 100644 t/t4018/java-class-member-function create mode 100644 t/t4018/java-class-space-before-type-parameters create mode 100644 t/t4018/java-class-type-parameters create mode 100644 t/t4018/java-class-type-parameters-implements create mode 100644 t/t4018/java-enum-constant create mode 100644 t/t4018/java-interface-type-parameters create mode 100644 t/t4018/java-interface-type-parameters-extends create mode 100644 t/t4018/java-method-return-generic-bounded create mode 100644 t/t4018/java-method-return-generic-wildcard create mode 100644 t/t4018/java-nested-field create mode 100644 t/t4018/java-non-sealed create mode 100644 t/t4018/java-record create mode 100644 t/t4018/java-record-space-before-components create mode 100644 t/t4018/java-record-type-parameters create mode 100644 t/t4018/java-sealed create mode 100644 t/t4018/java-sealed-permits create mode 100644 t/t4018/java-sealed-type-parameters create mode 100644 t/t4018/java-sealed-type-parameters-implements-permits create mode 100644 t/t4018/java-sealed-type-parameters-permits create mode 100644 t/t4018/kotlin-class create mode 100644 t/t4018/kotlin-enum-class create mode 100644 t/t4018/kotlin-fun create mode 100644 t/t4018/kotlin-inheritace-class create mode 100644 t/t4018/kotlin-inline-class create mode 100644 t/t4018/kotlin-interface create mode 100644 t/t4018/kotlin-nested-fun create mode 100644 t/t4018/kotlin-public-class create mode 100644 t/t4018/kotlin-sealed-class create mode 100644 t/t4018/markdown-heading-indented create mode 100644 t/t4018/markdown-heading-non-headings create mode 100644 t/t4018/matlab-class-definition create mode 100644 t/t4018/matlab-function create mode 100644 t/t4018/matlab-octave-section-1 create mode 100644 t/t4018/matlab-octave-section-2 create mode 100644 t/t4018/matlab-section create mode 100644 t/t4018/perl-skip-end-of-heredoc create mode 100644 t/t4018/perl-skip-forward-decl create mode 100644 t/t4018/perl-skip-sub-in-pod create mode 100644 t/t4018/perl-sub-definition create mode 100644 t/t4018/perl-sub-definition-kr-brace create mode 100644 t/t4018/php-abstract-class create mode 100644 t/t4018/php-abstract-method create mode 100644 t/t4018/php-class create mode 100644 t/t4018/php-enum create mode 100644 t/t4018/php-final-class create mode 100644 t/t4018/php-final-method create mode 100644 t/t4018/php-function create mode 100644 t/t4018/php-interface create mode 100644 t/t4018/php-method create mode 100644 t/t4018/php-trait create mode 100644 t/t4018/python-async-def create mode 100644 t/t4018/python-class create mode 100644 t/t4018/python-def create mode 100644 t/t4018/python-indented-async-def create mode 100644 t/t4018/python-indented-class create mode 100644 t/t4018/python-indented-def create mode 100644 t/t4018/rust-fn create mode 100644 t/t4018/rust-impl create mode 100644 t/t4018/rust-macro-rules create mode 100644 t/t4018/rust-struct create mode 100644 t/t4018/rust-trait create mode 100644 t/t4018/scheme-class create mode 100644 t/t4018/scheme-def create mode 100644 t/t4018/scheme-def-variant create mode 100644 t/t4018/scheme-define-slash-public create mode 100644 t/t4018/scheme-define-syntax create mode 100644 t/t4018/scheme-define-variant create mode 100644 t/t4018/scheme-library create mode 100644 t/t4018/scheme-local-define create mode 100644 t/t4018/scheme-module create mode 100644 t/t4018/scheme-top-level-define create mode 100644 t/t4018/scheme-user-defined-define create mode 100755 t/t4019-diff-wserror.sh create mode 100755 t/t4020-diff-external.sh create mode 100644 t/t4020/diff.NUL create mode 100755 t/t4021-format-patch-numbered.sh create mode 100755 t/t4022-diff-rewrite.sh create mode 100755 t/t4023-diff-rename-typechange.sh create mode 100755 t/t4024-diff-optimize-common.sh create mode 100755 t/t4025-hunk-header.sh create mode 100755 t/t4026-color.sh create mode 100755 t/t4027-diff-submodule.sh create mode 100755 t/t4028-format-patch-mime-headers.sh create mode 100755 t/t4029-diff-trailing-space.sh create mode 100755 t/t4030-diff-textconv.sh create mode 100755 t/t4031-diff-rewrite-binary.sh create mode 100755 t/t4032-diff-inter-hunk-context.sh create mode 100755 t/t4033-diff-patience.sh create mode 100755 t/t4034-diff-words.sh create mode 100644 t/t4034/ada/expect create mode 100644 t/t4034/ada/post create mode 100644 t/t4034/ada/pre create mode 100644 t/t4034/bibtex/expect create mode 100644 t/t4034/bibtex/post create mode 100644 t/t4034/bibtex/pre create mode 100644 t/t4034/cpp/expect create mode 100644 t/t4034/cpp/post create mode 100644 t/t4034/cpp/pre create mode 100644 t/t4034/csharp/expect create mode 100644 t/t4034/csharp/post create mode 100644 t/t4034/csharp/pre create mode 100644 t/t4034/css/expect create mode 100644 t/t4034/css/post create mode 100644 t/t4034/css/pre create mode 100644 t/t4034/dts/expect create mode 100644 t/t4034/dts/post create mode 100644 t/t4034/dts/pre create mode 100644 t/t4034/fortran/expect create mode 100644 t/t4034/fortran/post create mode 100644 t/t4034/fortran/pre create mode 100644 t/t4034/html/expect create mode 100644 t/t4034/html/post create mode 100644 t/t4034/html/pre create mode 100644 t/t4034/java/expect create mode 100644 t/t4034/java/post create mode 100644 t/t4034/java/pre create mode 100644 t/t4034/kotlin/expect create mode 100644 t/t4034/kotlin/post create mode 100644 t/t4034/kotlin/pre create mode 100644 t/t4034/matlab/expect create mode 100644 t/t4034/matlab/post create mode 100644 t/t4034/matlab/pre create mode 100644 t/t4034/objc/expect create mode 100644 t/t4034/objc/post create mode 100644 t/t4034/objc/pre create mode 100644 t/t4034/pascal/expect create mode 100644 t/t4034/pascal/post create mode 100644 t/t4034/pascal/pre create mode 100644 t/t4034/perl/expect create mode 100644 t/t4034/perl/post create mode 100644 t/t4034/perl/pre create mode 100644 t/t4034/php/expect create mode 100644 t/t4034/php/post create mode 100644 t/t4034/php/pre create mode 100644 t/t4034/python/expect create mode 100644 t/t4034/python/post create mode 100644 t/t4034/python/pre create mode 100644 t/t4034/ruby/expect create mode 100644 t/t4034/ruby/post create mode 100644 t/t4034/ruby/pre create mode 100644 t/t4034/scheme/expect create mode 100644 t/t4034/scheme/post create mode 100644 t/t4034/scheme/pre create mode 100644 t/t4034/tex/expect create mode 100644 t/t4034/tex/post create mode 100644 t/t4034/tex/pre create mode 100755 t/t4035-diff-quiet.sh create mode 100755 t/t4036-format-patch-signer-mime.sh create mode 100755 t/t4037-diff-r-t-dirs.sh create mode 100755 t/t4038-diff-combined.sh create mode 100755 t/t4039-diff-assume-unchanged.sh create mode 100755 t/t4040-whitespace-status.sh create mode 100755 t/t4041-diff-submodule-option.sh create mode 100755 t/t4042-diff-textconv-caching.sh create mode 100755 t/t4043-diff-rename-binary.sh create mode 100755 t/t4044-diff-index-unique-abbrev.sh create mode 100755 t/t4045-diff-relative.sh create mode 100755 t/t4046-diff-unmerged.sh create mode 100755 t/t4047-diff-dirstat.sh create mode 100755 t/t4048-diff-combined-binary.sh create mode 100755 t/t4049-diff-stat-count.sh create mode 100755 t/t4050-diff-histogram.sh create mode 100755 t/t4051-diff-function-context.sh create mode 100644 t/t4051/appended1.c create mode 100644 t/t4051/appended2.c create mode 100644 t/t4051/dummy.c create mode 100644 t/t4051/hello.c create mode 100644 t/t4051/includes.c create mode 100755 t/t4052-stat-output.sh create mode 100755 t/t4053-diff-no-index.sh create mode 100755 t/t4054-diff-bogus-tree.sh create mode 100755 t/t4055-diff-context.sh create mode 100755 t/t4056-diff-order.sh create mode 100755 t/t4057-diff-combined-paths.sh create mode 100755 t/t4058-diff-duplicates.sh create mode 100755 t/t4059-diff-submodule-not-initialized.sh create mode 100755 t/t4060-diff-submodule-option-diff-format.sh create mode 100755 t/t4061-diff-indent.sh create mode 100755 t/t4062-diff-pickaxe.sh create mode 100755 t/t4063-diff-blobs.sh create mode 100755 t/t4064-diff-oidfind.sh create mode 100755 t/t4065-diff-anchored.sh create mode 100755 t/t4066-diff-emit-delay.sh create mode 100755 t/t4067-diff-partial-clone.sh create mode 100755 t/t4068-diff-symmetric-merge-base.sh create mode 100755 t/t4069-remerge-diff.sh create mode 100755 t/t4100-apply-stat.sh create mode 100644 t/t4100/t-apply-1.expect create mode 100644 t/t4100/t-apply-1.patch create mode 100644 t/t4100/t-apply-2.expect create mode 100644 t/t4100/t-apply-2.patch create mode 100644 t/t4100/t-apply-3.expect create mode 100644 t/t4100/t-apply-3.patch create mode 100644 t/t4100/t-apply-4.expect create mode 100644 t/t4100/t-apply-4.patch create mode 100644 t/t4100/t-apply-5.expect create mode 100644 t/t4100/t-apply-5.patch create mode 100644 t/t4100/t-apply-6.expect create mode 100644 t/t4100/t-apply-6.patch create mode 100644 t/t4100/t-apply-7.expect create mode 100644 t/t4100/t-apply-7.patch create mode 100644 t/t4100/t-apply-8.expect create mode 100644 t/t4100/t-apply-8.patch create mode 100644 t/t4100/t-apply-9.expect create mode 100644 t/t4100/t-apply-9.patch create mode 100755 t/t4101-apply-nonl.sh create mode 100644 t/t4101/diff.0-1 create mode 100644 t/t4101/diff.0-2 create mode 100644 t/t4101/diff.0-3 create mode 100644 t/t4101/diff.1-0 create mode 100644 t/t4101/diff.1-2 create mode 100644 t/t4101/diff.1-3 create mode 100644 t/t4101/diff.2-0 create mode 100644 t/t4101/diff.2-1 create mode 100644 t/t4101/diff.2-3 create mode 100644 t/t4101/diff.3-0 create mode 100644 t/t4101/diff.3-1 create mode 100644 t/t4101/diff.3-2 create mode 100755 t/t4102-apply-rename.sh create mode 100755 t/t4103-apply-binary.sh create mode 100755 t/t4104-apply-boundary.sh create mode 100755 t/t4105-apply-fuzz.sh create mode 100755 t/t4106-apply-stdin.sh create mode 100755 t/t4107-apply-ignore-whitespace.sh create mode 100755 t/t4108-apply-threeway.sh create mode 100755 t/t4109-apply-multifrag.sh create mode 100644 t/t4109/expect-1 create mode 100644 t/t4109/expect-2 create mode 100644 t/t4109/expect-3 create mode 100644 t/t4109/patch1.patch create mode 100644 t/t4109/patch2.patch create mode 100644 t/t4109/patch3.patch create mode 100644 t/t4109/patch4.patch create mode 100755 t/t4110-apply-scan.sh create mode 100644 t/t4110/expect create mode 100644 t/t4110/patch1.patch create mode 100644 t/t4110/patch2.patch create mode 100644 t/t4110/patch3.patch create mode 100644 t/t4110/patch4.patch create mode 100644 t/t4110/patch5.patch create mode 100755 t/t4111-apply-subdir.sh create mode 100755 t/t4112-apply-renames.sh create mode 100755 t/t4113-apply-ending.sh create mode 100755 t/t4114-apply-typechange.sh create mode 100755 t/t4115-apply-symlink.sh create mode 100755 t/t4116-apply-reverse.sh create mode 100755 t/t4117-apply-reject.sh create mode 100755 t/t4118-apply-empty-context.sh create mode 100755 t/t4119-apply-config.sh create mode 100755 t/t4120-apply-popt.sh create mode 100755 t/t4121-apply-diffs.sh create mode 100755 t/t4122-apply-symlink-inside.sh create mode 100755 t/t4123-apply-shrink.sh create mode 100755 t/t4124-apply-ws-rule.sh create mode 100755 t/t4125-apply-ws-fuzz.sh create mode 100755 t/t4126-apply-empty.sh create mode 100755 t/t4127-apply-same-fn.sh create mode 100755 t/t4128-apply-root.sh create mode 100755 t/t4129-apply-samemode.sh create mode 100755 t/t4130-apply-criss-cross-rename.sh create mode 100755 t/t4131-apply-fake-ancestor.sh create mode 100755 t/t4132-apply-removal.sh create mode 100755 t/t4133-apply-filenames.sh create mode 100755 t/t4134-apply-submodule.sh create mode 100755 t/t4135-apply-weird-filenames.sh create mode 100644 t/t4135/.gitignore create mode 100644 t/t4135/add-plain.diff create mode 100644 t/t4135/add-with backslash.diff create mode 100644 t/t4135/add-with quote.diff create mode 100644 t/t4135/add-with spaces.diff create mode 100644 t/t4135/add-with tab.diff create mode 100644 t/t4135/damaged-tz.diff create mode 100644 t/t4135/damaged.diff create mode 100644 t/t4135/diff-plain.diff create mode 100644 t/t4135/diff-with backslash.diff create mode 100644 t/t4135/diff-with quote.diff create mode 100644 t/t4135/diff-with spaces.diff create mode 100644 t/t4135/diff-with tab.diff create mode 100644 t/t4135/funny-tz.diff create mode 100644 t/t4135/git-plain.diff create mode 100644 t/t4135/git-with backslash.diff create mode 100644 t/t4135/git-with quote.diff create mode 100644 t/t4135/git-with spaces.diff create mode 100644 t/t4135/git-with tab.diff create mode 100755 t/t4135/make-patches create mode 100755 t/t4136-apply-check.sh create mode 100755 t/t4137-apply-submodule.sh create mode 100755 t/t4138-apply-ws-expansion.sh create mode 100755 t/t4139-apply-escape.sh create mode 100755 t/t4140-apply-ita.sh create mode 100755 t/t4141-apply-too-large.sh create mode 100755 t/t4150-am.sh create mode 100755 t/t4151-am-abort.sh create mode 100755 t/t4152-am-subjects.sh create mode 100755 t/t4153-am-resume-override-opts.sh create mode 100755 t/t4200-rerere.sh create mode 100755 t/t4201-shortlog.sh create mode 100755 t/t4202-log.sh create mode 100755 t/t4203-mailmap.sh create mode 100755 t/t4204-patch-id.sh create mode 100755 t/t4205-log-pretty-formats.sh create mode 100755 t/t4206-log-follow-harder-copies.sh create mode 100755 t/t4207-log-decoration-colors.sh create mode 100755 t/t4208-log-magic-pathspec.sh create mode 100755 t/t4209-log-pickaxe.sh create mode 100755 t/t4210-log-i18n.sh create mode 100755 t/t4211-line-log.sh create mode 100644 t/t4211/history.export create mode 100644 t/t4211/sha1/expect.beginning-of-file create mode 100644 t/t4211/sha1/expect.end-of-file create mode 100644 t/t4211/sha1/expect.move-support-f create mode 100644 t/t4211/sha1/expect.multiple create mode 100644 t/t4211/sha1/expect.multiple-overlapping create mode 100644 t/t4211/sha1/expect.multiple-superset create mode 100644 t/t4211/sha1/expect.parallel-change-f-to-main create mode 100644 t/t4211/sha1/expect.simple-f create mode 100644 t/t4211/sha1/expect.simple-f-to-main create mode 100644 t/t4211/sha1/expect.simple-main create mode 100644 t/t4211/sha1/expect.simple-main-to-end create mode 100644 t/t4211/sha1/expect.two-ranges create mode 100644 t/t4211/sha1/expect.vanishes-early create mode 100644 t/t4211/sha256/expect.beginning-of-file create mode 100644 t/t4211/sha256/expect.end-of-file create mode 100644 t/t4211/sha256/expect.move-support-f create mode 100644 t/t4211/sha256/expect.multiple create mode 100644 t/t4211/sha256/expect.multiple-overlapping create mode 100644 t/t4211/sha256/expect.multiple-superset create mode 100644 t/t4211/sha256/expect.parallel-change-f-to-main create mode 100644 t/t4211/sha256/expect.simple-f create mode 100644 t/t4211/sha256/expect.simple-f-to-main create mode 100644 t/t4211/sha256/expect.simple-main create mode 100644 t/t4211/sha256/expect.simple-main-to-end create mode 100644 t/t4211/sha256/expect.two-ranges create mode 100644 t/t4211/sha256/expect.vanishes-early create mode 100755 t/t4212-log-corrupt.sh create mode 100755 t/t4213-log-tabexpand.sh create mode 100755 t/t4214-log-graph-octopus.sh create mode 100755 t/t4215-log-skewed-merges.sh create mode 100755 t/t4216-log-bloom.sh create mode 100755 t/t4217-log-limit.sh create mode 100755 t/t4252-am-options.sh create mode 100644 t/t4252/am-test-1-1 create mode 100644 t/t4252/am-test-1-2 create mode 100644 t/t4252/am-test-2-1 create mode 100644 t/t4252/am-test-2-2 create mode 100644 t/t4252/am-test-3-1 create mode 100644 t/t4252/am-test-3-2 create mode 100644 t/t4252/am-test-4-1 create mode 100644 t/t4252/am-test-4-2 create mode 100644 t/t4252/am-test-5-1 create mode 100644 t/t4252/am-test-5-2 create mode 100644 t/t4252/am-test-6-1 create mode 100644 t/t4252/file-1-0 create mode 100644 t/t4252/file-2-0 create mode 100755 t/t4253-am-keep-cr-dos.sh create mode 100755 t/t4254-am-corrupt.sh create mode 100755 t/t4255-am-submodule.sh create mode 100755 t/t4256-am-format-flowed.sh create mode 100644 t/t4256/1/mailinfo.c create mode 100644 t/t4256/1/mailinfo.c.orig create mode 100644 t/t4256/1/patch create mode 100755 t/t4257-am-interactive.sh create mode 100755 t/t4258-am-quoted-cr.sh create mode 100644 t/t4258/mbox create mode 100755 t/t4300-merge-tree.sh create mode 100755 t/t4301-merge-tree-write-tree.sh create mode 100755 t/t5000-tar-tree.sh create mode 100644 t/t5000/huge-and-future.tar create mode 100644 t/t5000/huge-object create mode 100644 t/t5000/pax.tar create mode 100755 t/t5001-archive-attr.sh create mode 100755 t/t5002-archive-attr-pattern.sh create mode 100755 t/t5003-archive-zip.sh create mode 100644 t/t5003/infozip-symlinks.zip create mode 100755 t/t5004-archive-corner-cases.sh create mode 100644 t/t5004/big-pack.zip create mode 100644 t/t5004/empty-with-pax-header.tar create mode 100644 t/t5004/empty.zip create mode 100755 t/t5100-mailinfo.sh create mode 100644 t/t5100/.gitattributes create mode 100644 t/t5100/0001mboxrd create mode 100644 t/t5100/0002mboxrd create mode 100644 t/t5100/comment.expect create mode 100644 t/t5100/comment.in create mode 100644 t/t5100/embed-from.expect create mode 100644 t/t5100/embed-from.in create mode 100644 t/t5100/empty create mode 100644 t/t5100/info-from.expect create mode 100644 t/t5100/info-from.in create mode 100644 t/t5100/info0001 create mode 100644 t/t5100/info0002 create mode 100644 t/t5100/info0003 create mode 100644 t/t5100/info0004 create mode 100644 t/t5100/info0005 create mode 100644 t/t5100/info0006 create mode 100644 t/t5100/info0007 create mode 100644 t/t5100/info0008 create mode 100644 t/t5100/info0009 create mode 100644 t/t5100/info0010 create mode 100644 t/t5100/info0011 create mode 100644 t/t5100/info0012 create mode 100644 t/t5100/info0012--message-id create mode 100644 t/t5100/info0013 create mode 100644 t/t5100/info0014 create mode 100644 t/t5100/info0014--scissors create mode 100644 t/t5100/info0015 create mode 100644 t/t5100/info0015--no-inbody-headers create mode 100644 t/t5100/info0016 create mode 100644 t/t5100/info0016--no-inbody-headers create mode 100644 t/t5100/info0017 create mode 100644 t/t5100/info0018 create mode 100644 t/t5100/info0018--no-inbody-headers create mode 100644 t/t5100/msg0001 create mode 100644 t/t5100/msg0002 create mode 100644 t/t5100/msg0003 create mode 100644 t/t5100/msg0004 create mode 100644 t/t5100/msg0005 create mode 100644 t/t5100/msg0006 create mode 100644 t/t5100/msg0007 create mode 100644 t/t5100/msg0008 create mode 100644 t/t5100/msg0009 create mode 100644 t/t5100/msg0010 create mode 100644 t/t5100/msg0011 create mode 100644 t/t5100/msg0012 create mode 100644 t/t5100/msg0012--message-id create mode 100644 t/t5100/msg0013 create mode 100644 t/t5100/msg0014 create mode 100644 t/t5100/msg0014--scissors create mode 100644 t/t5100/msg0015 create mode 100644 t/t5100/msg0015--no-inbody-headers create mode 100644 t/t5100/msg0016 create mode 100644 t/t5100/msg0016--no-inbody-headers create mode 100644 t/t5100/msg0017 create mode 100644 t/t5100/msg0018 create mode 100644 t/t5100/msg0018--no-inbody-headers create mode 100644 t/t5100/nul-b64.expect create mode 100644 t/t5100/nul-b64.in create mode 100644 t/t5100/nul-plain create mode 100644 t/t5100/patch0001 create mode 100644 t/t5100/patch0002 create mode 100644 t/t5100/patch0003 create mode 100644 t/t5100/patch0004 create mode 100644 t/t5100/patch0005 create mode 100644 t/t5100/patch0006 create mode 100644 t/t5100/patch0007 create mode 100644 t/t5100/patch0008 create mode 100644 t/t5100/patch0009 create mode 100644 t/t5100/patch0010 create mode 100644 t/t5100/patch0011 create mode 100644 t/t5100/patch0012 create mode 100644 t/t5100/patch0012--message-id create mode 100644 t/t5100/patch0013 create mode 100644 t/t5100/patch0014 create mode 100644 t/t5100/patch0014--scissors create mode 100644 t/t5100/patch0015 create mode 100644 t/t5100/patch0015--no-inbody-headers create mode 100644 t/t5100/patch0016 create mode 100644 t/t5100/patch0016--no-inbody-headers create mode 100644 t/t5100/patch0017 create mode 100644 t/t5100/patch0018 create mode 100644 t/t5100/patch0018--no-inbody-headers create mode 100644 t/t5100/quoted-cr-info create mode 100644 t/t5100/quoted-cr-msg create mode 100644 t/t5100/quoted-cr-patch create mode 100644 t/t5100/quoted-cr.mbox create mode 100644 t/t5100/quoted-from.expect create mode 100644 t/t5100/quoted-from.in create mode 100644 t/t5100/quoted-string.expect create mode 100644 t/t5100/quoted-string.in create mode 100644 t/t5100/rfc2047-info-0001 create mode 100644 t/t5100/rfc2047-info-0002 create mode 100644 t/t5100/rfc2047-info-0003 create mode 100644 t/t5100/rfc2047-info-0004 create mode 100644 t/t5100/rfc2047-info-0005 create mode 100644 t/t5100/rfc2047-info-0006 create mode 100644 t/t5100/rfc2047-info-0007 create mode 100644 t/t5100/rfc2047-info-0008 create mode 100644 t/t5100/rfc2047-info-0009 create mode 100644 t/t5100/rfc2047-info-0010 create mode 100644 t/t5100/rfc2047-info-0011 create mode 100644 t/t5100/rfc2047-samples.mbox create mode 100644 t/t5100/sample.mbox create mode 100644 t/t5100/sample.mboxrd create mode 100755 t/t5150-request-pull.sh create mode 100755 t/t5200-update-server-info.sh create mode 100755 t/t5300-pack-object.sh create mode 100755 t/t5301-sliding-window.sh create mode 100755 t/t5302-pack-index.sh create mode 100755 t/t5303-pack-corruption-resilience.sh create mode 100755 t/t5304-prune.sh create mode 100755 t/t5305-include-tag.sh create mode 100755 t/t5306-pack-nobase.sh create mode 100755 t/t5307-pack-missing-commit.sh create mode 100755 t/t5308-pack-detect-duplicates.sh create mode 100755 t/t5309-pack-delta-cycles.sh create mode 100755 t/t5310-pack-bitmaps.sh create mode 100755 t/t5311-pack-bitmaps-shallow.sh create mode 100755 t/t5312-prune-corruption.sh create mode 100755 t/t5313-pack-bounds-checks.sh create mode 100755 t/t5314-pack-cycle-detection.sh create mode 100755 t/t5315-pack-objects-compression.sh create mode 100755 t/t5316-pack-delta-depth.sh create mode 100755 t/t5317-pack-objects-filter-objects.sh create mode 100755 t/t5318-commit-graph.sh create mode 100755 t/t5319-multi-pack-index.sh create mode 100644 t/t5319/no-objects.midx create mode 100755 t/t5320-delta-islands.sh create mode 100755 t/t5321-pack-large-objects.sh create mode 100755 t/t5322-pack-objects-sparse.sh create mode 100755 t/t5323-pack-redundant.sh create mode 100755 t/t5324-split-commit-graph.sh create mode 100755 t/t5325-reverse-index.sh create mode 100755 t/t5326-multi-pack-bitmaps.sh create mode 100755 t/t5327-multi-pack-bitmaps-rev.sh create mode 100755 t/t5328-commit-graph-64bit-time.sh create mode 100755 t/t5329-pack-objects-cruft.sh create mode 100755 t/t5330-no-lazy-fetch-with-commit-graph.sh create mode 100755 t/t5331-pack-objects-stdin.sh create mode 100755 t/t5332-multi-pack-reuse.sh create mode 100755 t/t5333-pseudo-merge-bitmaps.sh create mode 100755 t/t5334-incremental-multi-pack-index.sh create mode 100755 t/t5351-unpack-large-objects.sh create mode 100755 t/t5400-send-pack.sh create mode 100755 t/t5401-update-hooks.sh create mode 100755 t/t5402-post-merge-hook.sh create mode 100755 t/t5403-post-checkout-hook.sh create mode 100755 t/t5404-tracking-branches.sh create mode 100755 t/t5405-send-pack-rewind.sh create mode 100755 t/t5406-remote-rejects.sh create mode 100755 t/t5407-post-rewrite-hook.sh create mode 100755 t/t5408-send-pack-stdin.sh create mode 100755 t/t5409-colorize-remote-messages.sh create mode 100755 t/t5410-receive-pack-alternates.sh create mode 100755 t/t5411-proc-receive-hook.sh create mode 100644 t/t5411/common-functions.sh create mode 100644 t/t5411/once-0010-report-status-v1.sh create mode 100644 t/t5411/test-0000-standard-git-push.sh create mode 100644 t/t5411/test-0001-standard-git-push--porcelain.sh create mode 100644 t/t5411/test-0002-pre-receive-declined.sh create mode 100644 t/t5411/test-0003-pre-receive-declined--porcelain.sh create mode 100644 t/t5411/test-0010-proc-receive-settings.sh create mode 100644 t/t5411/test-0011-no-hook-error.sh create mode 100644 t/t5411/test-0012-no-hook-error--porcelain.sh create mode 100644 t/t5411/test-0013-bad-protocol.sh create mode 100644 t/t5411/test-0014-bad-protocol--porcelain.sh create mode 100644 t/t5411/test-0020-report-ng.sh create mode 100644 t/t5411/test-0021-report-ng--porcelain.sh create mode 100644 t/t5411/test-0022-report-unexpect-ref.sh create mode 100644 t/t5411/test-0023-report-unexpect-ref--porcelain.sh create mode 100644 t/t5411/test-0024-report-unknown-ref.sh create mode 100644 t/t5411/test-0025-report-unknown-ref--porcelain.sh create mode 100644 t/t5411/test-0026-push-options.sh create mode 100644 t/t5411/test-0027-push-options--porcelain.sh create mode 100644 t/t5411/test-0030-report-ok.sh create mode 100644 t/t5411/test-0031-report-ok--porcelain.sh create mode 100644 t/t5411/test-0032-report-with-options.sh create mode 100644 t/t5411/test-0033-report-with-options--porcelain.sh create mode 100644 t/t5411/test-0034-report-ft.sh create mode 100644 t/t5411/test-0035-report-ft--porcelain.sh create mode 100644 t/t5411/test-0036-report-multi-rewrite-for-one-ref.sh create mode 100644 t/t5411/test-0037-report-multi-rewrite-for-one-ref--porcelain.sh create mode 100644 t/t5411/test-0038-report-mixed-refs.sh create mode 100644 t/t5411/test-0039-report-mixed-refs--porcelain.sh create mode 100644 t/t5411/test-0040-process-all-refs.sh create mode 100644 t/t5411/test-0041-process-all-refs--porcelain.sh create mode 100644 t/t5411/test-0050-proc-receive-refs-with-modifiers.sh create mode 100755 t/t5500-fetch-pack.sh create mode 100755 t/t5501-fetch-push-alternates.sh create mode 100755 t/t5502-quickfetch.sh create mode 100755 t/t5503-tagfollow.sh create mode 100755 t/t5504-fetch-receive-strict.sh create mode 100755 t/t5505-remote.sh create mode 100755 t/t5506-remote-groups.sh create mode 100755 t/t5507-remote-environment.sh create mode 100755 t/t5509-fetch-push-namespaces.sh create mode 100755 t/t5510-fetch.sh create mode 100755 t/t5511-refspec.sh create mode 100755 t/t5512-ls-remote.sh create mode 100755 t/t5513-fetch-track.sh create mode 100755 t/t5514-fetch-multiple.sh create mode 100755 t/t5515-fetch-merge-logic.sh create mode 100644 t/t5515/fetch.br-branches-default create mode 100644 t/t5515/fetch.br-branches-default-merge create mode 100644 t/t5515/fetch.br-branches-default-merge_branches-default create mode 100644 t/t5515/fetch.br-branches-default-octopus create mode 100644 t/t5515/fetch.br-branches-default-octopus_branches-default create mode 100644 t/t5515/fetch.br-branches-default_branches-default create mode 100644 t/t5515/fetch.br-branches-one create mode 100644 t/t5515/fetch.br-branches-one-merge create mode 100644 t/t5515/fetch.br-branches-one-merge_branches-one create mode 100644 t/t5515/fetch.br-branches-one-octopus create mode 100644 t/t5515/fetch.br-branches-one-octopus_branches-one create mode 100644 t/t5515/fetch.br-branches-one_branches-one create mode 100644 t/t5515/fetch.br-config-explicit create mode 100644 t/t5515/fetch.br-config-explicit-merge create mode 100644 t/t5515/fetch.br-config-explicit-merge_config-explicit create mode 100644 t/t5515/fetch.br-config-explicit-octopus create mode 100644 t/t5515/fetch.br-config-explicit-octopus_config-explicit create mode 100644 t/t5515/fetch.br-config-explicit_config-explicit create mode 100644 t/t5515/fetch.br-config-glob create mode 100644 t/t5515/fetch.br-config-glob-merge create mode 100644 t/t5515/fetch.br-config-glob-merge_config-glob create mode 100644 t/t5515/fetch.br-config-glob-octopus create mode 100644 t/t5515/fetch.br-config-glob-octopus_config-glob create mode 100644 t/t5515/fetch.br-config-glob_config-glob create mode 100644 t/t5515/fetch.br-remote-explicit create mode 100644 t/t5515/fetch.br-remote-explicit-merge create mode 100644 t/t5515/fetch.br-remote-explicit-merge_remote-explicit create mode 100644 t/t5515/fetch.br-remote-explicit-octopus create mode 100644 t/t5515/fetch.br-remote-explicit-octopus_remote-explicit create mode 100644 t/t5515/fetch.br-remote-explicit_remote-explicit create mode 100644 t/t5515/fetch.br-remote-glob create mode 100644 t/t5515/fetch.br-remote-glob-merge create mode 100644 t/t5515/fetch.br-remote-glob-merge_remote-glob create mode 100644 t/t5515/fetch.br-remote-glob-octopus create mode 100644 t/t5515/fetch.br-remote-glob-octopus_remote-glob create mode 100644 t/t5515/fetch.br-remote-glob_remote-glob create mode 100644 t/t5515/fetch.br-unconfig create mode 100644 t/t5515/fetch.br-unconfig_--tags_.._.git create mode 100644 t/t5515/fetch.br-unconfig_.._.git create mode 100644 t/t5515/fetch.br-unconfig_.._.git_one create mode 100644 t/t5515/fetch.br-unconfig_.._.git_one_tag_tag-one_tag_tag-three-file create mode 100644 t/t5515/fetch.br-unconfig_.._.git_one_two create mode 100644 t/t5515/fetch.br-unconfig_.._.git_tag_tag-one-tree_tag_tag-three-file create mode 100644 t/t5515/fetch.br-unconfig_.._.git_tag_tag-one_tag_tag-three create mode 100644 t/t5515/fetch.br-unconfig_branches-default create mode 100644 t/t5515/fetch.br-unconfig_branches-one create mode 100644 t/t5515/fetch.br-unconfig_config-explicit create mode 100644 t/t5515/fetch.br-unconfig_config-glob create mode 100644 t/t5515/fetch.br-unconfig_remote-explicit create mode 100644 t/t5515/fetch.br-unconfig_remote-glob create mode 100644 t/t5515/fetch.main create mode 100644 t/t5515/fetch.main_--tags_.._.git create mode 100644 t/t5515/fetch.main_.._.git create mode 100644 t/t5515/fetch.main_.._.git_one create mode 100644 t/t5515/fetch.main_.._.git_one_tag_tag-one_tag_tag-three-file create mode 100644 t/t5515/fetch.main_.._.git_one_two create mode 100644 t/t5515/fetch.main_.._.git_tag_tag-one-tree_tag_tag-three-file create mode 100644 t/t5515/fetch.main_.._.git_tag_tag-one_tag_tag-three create mode 100644 t/t5515/fetch.main_branches-default create mode 100644 t/t5515/fetch.main_branches-one create mode 100644 t/t5515/fetch.main_config-explicit create mode 100644 t/t5515/fetch.main_config-glob create mode 100644 t/t5515/fetch.main_remote-explicit create mode 100644 t/t5515/fetch.main_remote-glob create mode 100644 t/t5515/refs.br-branches-default create mode 100644 t/t5515/refs.br-branches-default-merge create mode 100644 t/t5515/refs.br-branches-default-merge_branches-default create mode 100644 t/t5515/refs.br-branches-default-octopus create mode 100644 t/t5515/refs.br-branches-default-octopus_branches-default create mode 100644 t/t5515/refs.br-branches-default_branches-default create mode 100644 t/t5515/refs.br-branches-one create mode 100644 t/t5515/refs.br-branches-one-merge create mode 100644 t/t5515/refs.br-branches-one-merge_branches-one create mode 100644 t/t5515/refs.br-branches-one-octopus create mode 100644 t/t5515/refs.br-branches-one-octopus_branches-one create mode 100644 t/t5515/refs.br-branches-one_branches-one create mode 100644 t/t5515/refs.br-config-explicit create mode 100644 t/t5515/refs.br-config-explicit-merge create mode 100644 t/t5515/refs.br-config-explicit-merge_config-explicit create mode 100644 t/t5515/refs.br-config-explicit-octopus create mode 100644 t/t5515/refs.br-config-explicit-octopus_config-explicit create mode 100644 t/t5515/refs.br-config-explicit_config-explicit create mode 100644 t/t5515/refs.br-config-glob create mode 100644 t/t5515/refs.br-config-glob-merge create mode 100644 t/t5515/refs.br-config-glob-merge_config-glob create mode 100644 t/t5515/refs.br-config-glob-octopus create mode 100644 t/t5515/refs.br-config-glob-octopus_config-glob create mode 100644 t/t5515/refs.br-config-glob_config-glob create mode 100644 t/t5515/refs.br-remote-explicit create mode 100644 t/t5515/refs.br-remote-explicit-merge create mode 100644 t/t5515/refs.br-remote-explicit-merge_remote-explicit create mode 100644 t/t5515/refs.br-remote-explicit-octopus create mode 100644 t/t5515/refs.br-remote-explicit-octopus_remote-explicit create mode 100644 t/t5515/refs.br-remote-explicit_remote-explicit create mode 100644 t/t5515/refs.br-remote-glob create mode 100644 t/t5515/refs.br-remote-glob-merge create mode 100644 t/t5515/refs.br-remote-glob-merge_remote-glob create mode 100644 t/t5515/refs.br-remote-glob-octopus create mode 100644 t/t5515/refs.br-remote-glob-octopus_remote-glob create mode 100644 t/t5515/refs.br-remote-glob_remote-glob create mode 100644 t/t5515/refs.br-unconfig create mode 100644 t/t5515/refs.br-unconfig_--tags_.._.git create mode 100644 t/t5515/refs.br-unconfig_.._.git create mode 100644 t/t5515/refs.br-unconfig_.._.git_one create mode 100644 t/t5515/refs.br-unconfig_.._.git_one_tag_tag-one_tag_tag-three-file create mode 100644 t/t5515/refs.br-unconfig_.._.git_one_two create mode 100644 t/t5515/refs.br-unconfig_.._.git_tag_tag-one-tree_tag_tag-three-file create mode 100644 t/t5515/refs.br-unconfig_.._.git_tag_tag-one_tag_tag-three create mode 100644 t/t5515/refs.br-unconfig_branches-default create mode 100644 t/t5515/refs.br-unconfig_branches-one create mode 100644 t/t5515/refs.br-unconfig_config-explicit create mode 100644 t/t5515/refs.br-unconfig_config-glob create mode 100644 t/t5515/refs.br-unconfig_remote-explicit create mode 100644 t/t5515/refs.br-unconfig_remote-glob create mode 100644 t/t5515/refs.main create mode 100644 t/t5515/refs.main_--tags_.._.git create mode 100644 t/t5515/refs.main_.._.git create mode 100644 t/t5515/refs.main_.._.git_one create mode 100644 t/t5515/refs.main_.._.git_one_tag_tag-one_tag_tag-three-file create mode 100644 t/t5515/refs.main_.._.git_one_two create mode 100644 t/t5515/refs.main_.._.git_tag_tag-one-tree_tag_tag-three-file create mode 100644 t/t5515/refs.main_.._.git_tag_tag-one_tag_tag-three create mode 100644 t/t5515/refs.main_branches-default create mode 100644 t/t5515/refs.main_branches-one create mode 100644 t/t5515/refs.main_config-explicit create mode 100644 t/t5515/refs.main_config-glob create mode 100644 t/t5515/refs.main_remote-explicit create mode 100644 t/t5515/refs.main_remote-glob create mode 100755 t/t5516-fetch-push.sh create mode 100755 t/t5517-push-mirror.sh create mode 100755 t/t5518-fetch-exit-status.sh create mode 100755 t/t5519-push-alternates.sh create mode 100755 t/t5520-pull.sh create mode 100755 t/t5521-pull-options.sh create mode 100755 t/t5522-pull-symlink.sh create mode 100755 t/t5523-push-upstream.sh create mode 100755 t/t5524-pull-msg.sh create mode 100755 t/t5525-fetch-tagopt.sh create mode 100755 t/t5526-fetch-submodules.sh create mode 100755 t/t5527-fetch-odd-refs.sh create mode 100755 t/t5528-push-default.sh create mode 100755 t/t5529-push-errors.sh create mode 100755 t/t5530-upload-pack-error.sh create mode 100755 t/t5531-deep-submodule-push.sh create mode 100755 t/t5532-fetch-proxy.sh create mode 100755 t/t5533-push-cas.sh create mode 100755 t/t5534-push-signed.sh create mode 100755 t/t5535-fetch-push-symref.sh create mode 100755 t/t5536-fetch-conflicts.sh create mode 100755 t/t5537-fetch-shallow.sh create mode 100755 t/t5538-push-shallow.sh create mode 100755 t/t5539-fetch-http-shallow.sh create mode 100755 t/t5540-http-push-webdav.sh create mode 100755 t/t5541-http-push-smart.sh create mode 100755 t/t5542-push-http-shallow.sh create mode 100755 t/t5543-atomic-push.sh create mode 100755 t/t5544-pack-objects-hook.sh create mode 100755 t/t5545-push-options.sh create mode 100755 t/t5546-receive-limits.sh create mode 100755 t/t5547-push-quarantine.sh create mode 100755 t/t5548-push-porcelain.sh create mode 100755 t/t5549-fetch-push-http.sh create mode 100755 t/t5550-http-fetch-dumb.sh create mode 100755 t/t5551-http-fetch-smart.sh create mode 100755 t/t5552-skipping-fetch-negotiator.sh create mode 100755 t/t5553-set-upstream.sh create mode 100755 t/t5554-noop-fetch-negotiator.sh create mode 100755 t/t5555-http-smart-common.sh create mode 100755 t/t5557-http-get.sh create mode 100755 t/t5558-clone-bundle-uri.sh create mode 100755 t/t5559-http-fetch-smart-http2.sh create mode 100755 t/t5560-http-backend-noserver.sh create mode 100755 t/t5561-http-backend.sh create mode 100755 t/t5562-http-backend-content-length.sh create mode 100644 t/t5562/invoke-with-content-length.pl create mode 100755 t/t5563-simple-http-auth.sh create mode 100755 t/t5564-http-proxy.sh create mode 100755 t/t556x_common create mode 100755 t/t5570-git-daemon.sh create mode 100755 t/t5571-pre-push-hook.sh create mode 100755 t/t5572-pull-submodule.sh create mode 100755 t/t5573-pull-verify-signatures.sh create mode 100755 t/t5574-fetch-output.sh create mode 100755 t/t5580-unc-paths.sh create mode 100755 t/t5581-http-curl-verbose.sh create mode 100755 t/t5582-fetch-negative-refspec.sh create mode 100755 t/t5583-push-branches.sh create mode 100755 t/t5600-clone-fail-cleanup.sh create mode 100755 t/t5601-clone.sh create mode 100755 t/t5602-clone-remote-exec.sh create mode 100755 t/t5603-clone-dirname.sh create mode 100755 t/t5604-clone-reference.sh create mode 100755 t/t5605-clone-local.sh create mode 100755 t/t5606-clone-options.sh create mode 100755 t/t5607-clone-bundle.sh create mode 100755 t/t5608-clone-2gb.sh create mode 100755 t/t5609-clone-branch.sh create mode 100755 t/t5610-clone-detached.sh create mode 100755 t/t5611-clone-config.sh create mode 100755 t/t5612-clone-refspec.sh create mode 100755 t/t5613-info-alternate.sh create mode 100755 t/t5614-clone-submodules-shallow.sh create mode 100755 t/t5615-alternate-env.sh create mode 100755 t/t5616-partial-clone.sh create mode 100755 t/t5617-clone-submodules-remote.sh create mode 100755 t/t5618-alternate-refs.sh create mode 100755 t/t5619-clone-local-ambiguous-transport.sh create mode 100755 t/t5700-protocol-v1.sh create mode 100755 t/t5701-git-serve.sh create mode 100755 t/t5702-protocol-v2.sh create mode 100755 t/t5703-upload-pack-ref-in-want.sh create mode 100755 t/t5704-protocol-violations.sh create mode 100755 t/t5705-session-id-in-capabilities.sh create mode 100755 t/t5730-protocol-v2-bundle-uri-file.sh create mode 100755 t/t5731-protocol-v2-bundle-uri-git.sh create mode 100755 t/t5732-protocol-v2-bundle-uri-http.sh create mode 100755 t/t5750-bundle-uri-parse.sh create mode 100755 t/t5801-remote-helpers.sh create mode 100755 t/t5801/git-remote-nourl create mode 100755 t/t5801/git-remote-testgit create mode 100755 t/t5802-connect-helper.sh create mode 100755 t/t5810-proto-disable-local.sh create mode 100755 t/t5811-proto-disable-git.sh create mode 100755 t/t5812-proto-disable-http.sh create mode 100755 t/t5813-proto-disable-ssh.sh create mode 100755 t/t5814-proto-disable-ext.sh create mode 100755 t/t5815-submodule-protos.sh create mode 100755 t/t5900-repo-selection.sh create mode 100755 t/t6000-rev-list-misc.sh create mode 100755 t/t6001-rev-list-graft.sh create mode 100755 t/t6002-rev-list-bisect.sh create mode 100755 t/t6003-rev-list-topo-order.sh create mode 100755 t/t6004-rev-list-path-optim.sh create mode 100755 t/t6005-rev-list-count.sh create mode 100755 t/t6006-rev-list-format.sh create mode 100755 t/t6007-rev-list-cherry-pick-file.sh create mode 100755 t/t6008-rev-list-submodule.sh create mode 100755 t/t6009-rev-list-parent.sh create mode 100755 t/t6010-merge-base.sh create mode 100755 t/t6011-rev-list-with-bad-commit.sh create mode 100755 t/t6012-rev-list-simplify.sh create mode 100755 t/t6013-rev-list-reverse-parents.sh create mode 100755 t/t6014-rev-list-all.sh create mode 100755 t/t6016-rev-list-graph-simplify-history.sh create mode 100755 t/t6017-rev-list-stdin.sh create mode 100755 t/t6018-rev-list-glob.sh create mode 100755 t/t6019-rev-list-ancestry-path.sh create mode 100755 t/t6020-bundle-misc.sh create mode 100755 t/t6021-rev-list-exclude-hidden.sh create mode 100755 t/t6022-rev-list-missing.sh create mode 100755 t/t6030-bisect-porcelain.sh create mode 100755 t/t6040-tracking-info.sh create mode 100755 t/t6041-bisect-submodule.sh create mode 100755 t/t6050-replace.sh create mode 100755 t/t6060-merge-index.sh create mode 100755 t/t6100-rev-list-in-order.sh create mode 100755 t/t6101-rev-parse-parents.sh create mode 100755 t/t6102-rev-list-unexpected-objects.sh create mode 100755 t/t6110-rev-list-sparse.sh create mode 100755 t/t6111-rev-list-treesame.sh create mode 100755 t/t6112-rev-list-filters-objects.sh create mode 100755 t/t6113-rev-list-bitmap-filters.sh create mode 100755 t/t6114-keep-packs.sh create mode 100755 t/t6115-rev-list-du.sh create mode 100755 t/t6120-describe.sh create mode 100755 t/t6130-pathspec-noglob.sh create mode 100755 t/t6131-pathspec-icase.sh create mode 100755 t/t6132-pathspec-exclude.sh create mode 100755 t/t6133-pathspec-rev-dwim.sh create mode 100755 t/t6134-pathspec-in-submodule.sh create mode 100755 t/t6135-pathspec-with-attrs.sh create mode 100755 t/t6136-pathspec-in-bare.sh create mode 100755 t/t6200-fmt-merge-msg.sh create mode 100755 t/t6300-for-each-ref.sh create mode 100755 t/t6301-for-each-ref-errors.sh create mode 100755 t/t6302-for-each-ref-filter.sh create mode 100755 t/t6400-merge-df.sh create mode 100755 t/t6401-merge-criss-cross.sh create mode 100755 t/t6402-merge-rename.sh create mode 100755 t/t6403-merge-file.sh create mode 100755 t/t6404-recursive-merge.sh create mode 100755 t/t6405-merge-symlinks.sh create mode 100755 t/t6406-merge-attr.sh create mode 100755 t/t6407-merge-binary.sh create mode 100755 t/t6408-merge-up-to-date.sh create mode 100755 t/t6409-merge-subtree.sh create mode 100755 t/t6411-merge-filemode.sh create mode 100755 t/t6412-merge-large-rename.sh create mode 100755 t/t6413-merge-crlf.sh create mode 100755 t/t6414-merge-rename-nocruft.sh create mode 100755 t/t6415-merge-dir-to-symlink.sh create mode 100755 t/t6416-recursive-corner-cases.sh create mode 100755 t/t6417-merge-ours-theirs.sh create mode 100755 t/t6418-merge-text-auto.sh create mode 100755 t/t6419-merge-ignorecase.sh create mode 100755 t/t6421-merge-partial-clone.sh create mode 100755 t/t6422-merge-rename-corner-cases.sh create mode 100755 t/t6423-merge-rename-directories.sh create mode 100755 t/t6424-merge-unrelated-index-changes.sh create mode 100755 t/t6425-merge-rename-delete.sh create mode 100755 t/t6426-merge-skip-unneeded-updates.sh create mode 100755 t/t6427-diff3-conflict-markers.sh create mode 100755 t/t6428-merge-conflicts-sparse.sh create mode 100755 t/t6429-merge-sequence-rename-caching.sh create mode 100755 t/t6430-merge-recursive.sh create mode 100755 t/t6431-merge-criscross.sh create mode 100755 t/t6432-merge-recursive-space-options.sh create mode 100755 t/t6433-merge-toplevel.sh create mode 100755 t/t6434-merge-recursive-rename-options.sh create mode 100755 t/t6435-merge-sparse.sh create mode 100755 t/t6436-merge-overwrite.sh create mode 100755 t/t6437-submodule-merge.sh create mode 100755 t/t6438-submodule-directory-file-conflicts.sh create mode 100755 t/t6439-merge-co-error-msgs.sh create mode 100755 t/t6500-gc.sh create mode 100755 t/t6501-freshen-objects.sh create mode 100755 t/t6600-test-reach.sh create mode 100755 t/t6601-path-walk.sh create mode 100755 t/t6700-tree-depth.sh create mode 100755 t/t7001-mv.sh create mode 100755 t/t7002-mv-sparse-checkout.sh create mode 100755 t/t7003-filter-branch.sh create mode 100755 t/t7004-tag.sh create mode 100755 t/t7005-editor.sh create mode 100755 t/t7006-pager.sh create mode 100755 t/t7007-show.sh create mode 100755 t/t7008-filter-branch-null-sha1.sh create mode 100755 t/t7010-setup.sh create mode 100755 t/t7011-skip-worktree-reading.sh create mode 100755 t/t7012-skip-worktree-writing.sh create mode 100755 t/t7030-verify-tag.sh create mode 100755 t/t7031-verify-tag-signed-ssh.sh create mode 100755 t/t7060-wtstatus.sh create mode 100755 t/t7061-wtstatus-ignore.sh create mode 100755 t/t7062-wtstatus-ignorecase.sh create mode 100755 t/t7063-status-untracked-cache.sh create mode 100755 t/t7064-wtstatus-pv2.sh create mode 100755 t/t7101-reset-empty-subdirs.sh create mode 100755 t/t7102-reset.sh create mode 100755 t/t7103-reset-bare.sh create mode 100755 t/t7104-reset-hard.sh create mode 100755 t/t7105-reset-patch.sh create mode 100755 t/t7106-reset-unborn-branch.sh create mode 100755 t/t7107-reset-pathspec-file.sh create mode 100755 t/t7110-reset-merge.sh create mode 100755 t/t7111-reset-table.sh create mode 100755 t/t7112-reset-submodule.sh create mode 100755 t/t7113-post-index-change-hook.sh create mode 100755 t/t7201-co.sh create mode 100755 t/t7300-clean.sh create mode 100755 t/t7301-clean-interactive.sh create mode 100755 t/t7400-submodule-basic.sh create mode 100755 t/t7401-submodule-summary.sh create mode 100755 t/t7402-submodule-rebase.sh create mode 100755 t/t7403-submodule-sync.sh create mode 100755 t/t7406-submodule-update.sh create mode 100755 t/t7407-submodule-foreach.sh create mode 100755 t/t7408-submodule-reference.sh create mode 100755 t/t7409-submodule-detached-work-tree.sh create mode 100755 t/t7411-submodule-config.sh create mode 100755 t/t7412-submodule-absorbgitdirs.sh create mode 100755 t/t7413-submodule-is-active.sh create mode 100755 t/t7414-submodule-mistakes.sh create mode 100755 t/t7416-submodule-dash-url.sh create mode 100755 t/t7417-submodule-path-url.sh create mode 100755 t/t7418-submodule-sparse-gitmodules.sh create mode 100755 t/t7419-submodule-set-branch.sh create mode 100755 t/t7420-submodule-set-url.sh create mode 100755 t/t7421-submodule-summary-add.sh create mode 100755 t/t7422-submodule-output.sh create mode 100755 t/t7423-submodule-symlinks.sh create mode 100755 t/t7424-submodule-mixed-ref-formats.sh create mode 100755 t/t7450-bad-git-dotfiles.sh create mode 100755 t/t7500-commit-template-squash-signoff.sh create mode 100755 t/t7500/add-comments create mode 100755 t/t7500/add-content create mode 100755 t/t7500/add-content-and-comment create mode 100755 t/t7500/add-signed-off create mode 100755 t/t7500/add-whitespaced-content create mode 100755 t/t7500/edit-content create mode 100755 t/t7501-commit-basic-functionality.sh create mode 100755 t/t7502-commit-porcelain.sh create mode 100755 t/t7503-pre-commit-and-pre-merge-commit-hooks.sh create mode 100755 t/t7504-commit-msg-hook.sh create mode 100755 t/t7505-prepare-commit-msg-hook.sh create mode 100644 t/t7505/expected-rebase-i create mode 100644 t/t7505/expected-rebase-p create mode 100755 t/t7506-status-submodule.sh create mode 100755 t/t7507-commit-verbose.sh create mode 100755 t/t7508-status.sh create mode 100755 t/t7509-commit-authorship.sh create mode 100755 t/t7510-signed-commit.sh create mode 100755 t/t7511-status-index.sh create mode 100755 t/t7512-status-help.sh create mode 100755 t/t7513-interpret-trailers.sh create mode 100755 t/t7514-commit-patch.sh create mode 100755 t/t7515-status-symlinks.sh create mode 100755 t/t7516-commit-races.sh create mode 100755 t/t7517-per-repo-email.sh create mode 100755 t/t7518-ident-corner-cases.sh create mode 100755 t/t7519-status-fsmonitor.sh create mode 100755 t/t7519/fsmonitor-all create mode 100755 t/t7519/fsmonitor-all-v2 create mode 100755 t/t7519/fsmonitor-env create mode 100755 t/t7519/fsmonitor-none create mode 100755 t/t7519/fsmonitor-watchman create mode 100755 t/t7519/fsmonitor-watchman-v2 create mode 100755 t/t7520-ignored-hook-warning.sh create mode 100755 t/t7521-ignored-mode.sh create mode 100755 t/t7524-commit-summary.sh create mode 100755 t/t7525-status-rename.sh create mode 100755 t/t7526-commit-pathspec-file.sh create mode 100755 t/t7527-builtin-fsmonitor.sh create mode 100755 t/t7528-signed-commit-ssh.sh create mode 100755 t/t7600-merge.sh create mode 100755 t/t7601-merge-pull-config.sh create mode 100755 t/t7602-merge-octopus-many.sh create mode 100755 t/t7603-merge-reduce-heads.sh create mode 100755 t/t7604-merge-custom-message.sh create mode 100755 t/t7605-merge-resolve.sh create mode 100755 t/t7606-merge-custom.sh create mode 100755 t/t7607-merge-state.sh create mode 100755 t/t7608-merge-messages.sh create mode 100755 t/t7609-mergetool--lib.sh create mode 100755 t/t7610-mergetool.sh create mode 100755 t/t7611-merge-abort.sh create mode 100755 t/t7612-merge-verify-signatures.sh create mode 100755 t/t7614-merge-signoff.sh create mode 100755 t/t7615-diff-algo-with-mergy-operations.sh create mode 100644 t/t7615/base.c create mode 100644 t/t7615/ours.c create mode 100644 t/t7615/theirs.c create mode 100755 t/t7700-repack.sh create mode 100755 t/t7701-repack-unpack-unreachable.sh create mode 100755 t/t7702-repack-cyclic-alternate.sh create mode 100755 t/t7703-repack-geometric.sh create mode 100755 t/t7704-repack-cruft.sh create mode 100755 t/t7800-difftool.sh create mode 100755 t/t7810-grep.sh create mode 100755 t/t7811-grep-open.sh create mode 100755 t/t7812-grep-icase-non-ascii.sh create mode 100755 t/t7813-grep-icase-iso.sh create mode 100755 t/t7814-grep-recurse-submodules.sh create mode 100755 t/t7815-grep-binary.sh create mode 100755 t/t7816-grep-binary-pattern.sh create mode 100755 t/t7817-grep-sparse-checkout.sh create mode 100755 t/t7900-maintenance.sh create mode 100755 t/t8001-annotate.sh create mode 100755 t/t8002-blame.sh create mode 100755 t/t8003-blame-corner-cases.sh create mode 100755 t/t8004-blame-with-conflicts.sh create mode 100755 t/t8005-blame-i18n.sh create mode 100644 t/t8005/euc-japan.txt create mode 100644 t/t8005/sjis.txt create mode 100644 t/t8005/utf8.txt create mode 100755 t/t8006-blame-textconv.sh create mode 100755 t/t8007-cat-file-textconv.sh create mode 100755 t/t8008-blame-formats.sh create mode 100755 t/t8009-blame-vs-topicbranches.sh create mode 100755 t/t8010-cat-file-filters.sh create mode 100755 t/t8011-blame-split-file.sh create mode 100755 t/t8012-blame-colors.sh create mode 100755 t/t8013-blame-ignore-revs.sh create mode 100755 t/t8014-blame-ignore-fuzzy.sh create mode 100755 t/t9001-send-email.sh create mode 100755 t/t9002-column.sh create mode 100755 t/t9003-help-autocorrect.sh create mode 100755 t/t9100-git-svn-basic.sh create mode 100755 t/t9101-git-svn-props.sh create mode 100755 t/t9102-git-svn-deep-rmdir.sh create mode 100755 t/t9103-git-svn-tracked-directory-removed.sh create mode 100755 t/t9104-git-svn-follow-parent.sh create mode 100755 t/t9105-git-svn-commit-diff.sh create mode 100755 t/t9106-git-svn-commit-diff-clobber.sh create mode 100755 t/t9107-git-svn-migrate.sh create mode 100755 t/t9108-git-svn-glob.sh create mode 100755 t/t9109-git-svn-multi-glob.sh create mode 100755 t/t9110-git-svn-use-svm-props.sh create mode 100644 t/t9110/svm.dump create mode 100755 t/t9111-git-svn-use-svnsync-props.sh create mode 100644 t/t9111/svnsync.dump create mode 100755 t/t9112-git-svn-md5less-file.sh create mode 100755 t/t9113-git-svn-dcommit-new-file.sh create mode 100755 t/t9114-git-svn-dcommit-merge.sh create mode 100755 t/t9115-git-svn-dcommit-funky-renames.sh create mode 100644 t/t9115/funky-names.dump create mode 100755 t/t9116-git-svn-log.sh create mode 100755 t/t9117-git-svn-init-clone.sh create mode 100755 t/t9118-git-svn-funky-branch-names.sh create mode 100755 t/t9119-git-svn-info.sh create mode 100755 t/t9120-git-svn-clone-with-percent-escapes.sh create mode 100755 t/t9121-git-svn-fetch-renamed-dir.sh create mode 100644 t/t9121/renamed-dir.dump create mode 100755 t/t9122-git-svn-author.sh create mode 100755 t/t9123-git-svn-rebuild-with-rewriteroot.sh create mode 100755 t/t9124-git-svn-dcommit-auto-props.sh create mode 100755 t/t9125-git-svn-multi-glob-branch-names.sh create mode 100755 t/t9126-git-svn-follow-deleted-readded-directory.sh create mode 100644 t/t9126/follow-deleted-readded.dump create mode 100755 t/t9127-git-svn-partial-rebuild.sh create mode 100755 t/t9128-git-svn-cmd-branch.sh create mode 100755 t/t9129-git-svn-i18n-commitencoding.sh create mode 100755 t/t9130-git-svn-authors-file.sh create mode 100755 t/t9131-git-svn-empty-symlink.sh create mode 100755 t/t9132-git-svn-broken-symlink.sh create mode 100755 t/t9133-git-svn-nested-git-repo.sh create mode 100755 t/t9134-git-svn-ignore-paths.sh create mode 100755 t/t9135-git-svn-moved-branch-empty-file.sh create mode 100644 t/t9135/svn.dump create mode 100755 t/t9136-git-svn-recreated-branch-empty-file.sh create mode 100644 t/t9136/svn.dump create mode 100755 t/t9137-git-svn-dcommit-clobber-series.sh create mode 100755 t/t9138-git-svn-authors-prog.sh create mode 100755 t/t9139-git-svn-non-utf8-commitencoding.sh create mode 100755 t/t9140-git-svn-reset.sh create mode 100755 t/t9141-git-svn-multiple-branches.sh create mode 100755 t/t9142-git-svn-shallow-clone.sh create mode 100755 t/t9143-git-svn-gc.sh create mode 100755 t/t9144-git-svn-old-rev_map.sh create mode 100755 t/t9145-git-svn-master-branch.sh create mode 100755 t/t9146-git-svn-empty-dirs.sh create mode 100755 t/t9147-git-svn-include-paths.sh create mode 100755 t/t9148-git-svn-propset.sh create mode 100755 t/t9150-svk-mergetickets.sh create mode 100755 t/t9150/make-svk-dump create mode 100644 t/t9150/svk-merge.dump create mode 100755 t/t9151-svn-mergeinfo.sh create mode 100644 t/t9151/.gitignore create mode 100755 t/t9151/make-svnmerge-dump create mode 100644 t/t9151/svn-mergeinfo.dump create mode 100755 t/t9152-svn-empty-dirs-after-gc.sh create mode 100755 t/t9153-git-svn-rewrite-uuid.sh create mode 100644 t/t9153/svn.dump create mode 100755 t/t9154-git-svn-fancy-glob.sh create mode 100644 t/t9154/svn.dump create mode 100755 t/t9155-git-svn-fetch-deleted-tag.sh create mode 100755 t/t9156-git-svn-fetch-deleted-tag-2.sh create mode 100755 t/t9157-git-svn-fetch-merge.sh create mode 100755 t/t9158-git-svn-mergeinfo.sh create mode 100755 t/t9159-git-svn-no-parent-mergeinfo.sh create mode 100755 t/t9160-git-svn-preserve-empty-dirs.sh create mode 100755 t/t9161-git-svn-mergeinfo-push.sh create mode 100644 t/t9161/branches.dump create mode 100755 t/t9162-git-svn-dcommit-interactive.sh create mode 100755 t/t9163-git-svn-reset-clears-caches.sh create mode 100755 t/t9164-git-svn-dcommit-concurrent.sh create mode 100755 t/t9165-git-svn-fetch-merge-branch-of-branch.sh create mode 100755 t/t9166-git-svn-fetch-merge-branch-of-branch2.sh create mode 100755 t/t9167-git-svn-cmd-branch-subproject.sh create mode 100755 t/t9168-git-svn-partially-globbed-names.sh create mode 100755 t/t9169-git-svn-dcommit-crlf.sh create mode 100755 t/t9200-git-cvsexportcommit.sh create mode 100755 t/t9210-scalar.sh create mode 100755 t/t9211-scalar-clone.sh create mode 100755 t/t9300-fast-import.sh create mode 100755 t/t9301-fast-import-notes.sh create mode 100755 t/t9302-fast-import-unpack-limit.sh create mode 100755 t/t9303-fast-import-compression.sh create mode 100755 t/t9304-fast-import-marks.sh create mode 100755 t/t9350-fast-export.sh create mode 100644 t/t9350/broken-iso-8859-7-commit-message.txt create mode 100644 t/t9350/simple-iso-8859-7-commit-message.txt create mode 100755 t/t9351-fast-export-anonymize.sh create mode 100755 t/t9400-git-cvsserver-server.sh create mode 100755 t/t9401-git-cvsserver-crlf.sh create mode 100755 t/t9402-git-cvsserver-refs.sh create mode 100755 t/t9500-gitweb-standalone-no-errors.sh create mode 100755 t/t9501-gitweb-standalone-http-status.sh create mode 100755 t/t9502-gitweb-standalone-parse-output.sh create mode 100755 t/t9600-cvsimport.sh create mode 100755 t/t9601-cvsimport-vendor-branch.sh create mode 100644 t/t9601/cvsroot/.gitattributes create mode 100644 t/t9601/cvsroot/CVSROOT/.gitignore create mode 100644 t/t9601/cvsroot/module/added-imported.txt,v create mode 100644 t/t9601/cvsroot/module/imported-anonymously.txt,v create mode 100644 t/t9601/cvsroot/module/imported-modified-imported.txt,v create mode 100644 t/t9601/cvsroot/module/imported-modified.txt,v create mode 100644 t/t9601/cvsroot/module/imported-once.txt,v create mode 100644 t/t9601/cvsroot/module/imported-twice.txt,v create mode 100755 t/t9602-cvsimport-branches-tags.sh create mode 100644 t/t9602/README create mode 100644 t/t9602/cvsroot/.gitattributes create mode 100644 t/t9602/cvsroot/CVSROOT/.gitignore create mode 100644 t/t9602/cvsroot/module/default,v create mode 100644 t/t9602/cvsroot/module/sub1/default,v create mode 100644 t/t9602/cvsroot/module/sub1/subsubA/default,v create mode 100644 t/t9602/cvsroot/module/sub1/subsubB/default,v create mode 100644 t/t9602/cvsroot/module/sub2/Attic/branch_B_MIXED_only,v create mode 100644 t/t9602/cvsroot/module/sub2/default,v create mode 100644 t/t9602/cvsroot/module/sub2/subsubA/default,v create mode 100644 t/t9602/cvsroot/module/sub3/default,v create mode 100755 t/t9603-cvsimport-patchsets.sh create mode 100644 t/t9603/cvsroot/.gitattributes create mode 100644 t/t9603/cvsroot/CVSROOT/.gitignore create mode 100644 t/t9603/cvsroot/module/a,v create mode 100644 t/t9603/cvsroot/module/b,v create mode 100755 t/t9604-cvsimport-timestamps.sh create mode 100644 t/t9604/cvsroot/.gitattributes create mode 100644 t/t9604/cvsroot/CVSROOT/.gitignore create mode 100644 t/t9604/cvsroot/module/a,v create mode 100755 t/t9700-perl-git.sh create mode 100755 t/t9700/test.pl create mode 100755 t/t9800-git-p4-basic.sh create mode 100755 t/t9801-git-p4-branch.sh create mode 100755 t/t9802-git-p4-filetype.sh create mode 100755 t/t9803-git-p4-shell-metachars.sh create mode 100755 t/t9804-git-p4-label.sh create mode 100755 t/t9805-git-p4-skip-submit-edit.sh create mode 100755 t/t9806-git-p4-options.sh create mode 100755 t/t9807-git-p4-submit.sh create mode 100755 t/t9808-git-p4-chdir.sh create mode 100755 t/t9809-git-p4-client-view.sh create mode 100755 t/t9810-git-p4-rcs.sh create mode 100755 t/t9811-git-p4-label-import.sh create mode 100755 t/t9812-git-p4-wildcards.sh create mode 100755 t/t9813-git-p4-preserve-users.sh create mode 100755 t/t9814-git-p4-rename.sh create mode 100755 t/t9815-git-p4-submit-fail.sh create mode 100755 t/t9816-git-p4-locked.sh create mode 100755 t/t9817-git-p4-exclude.sh create mode 100755 t/t9818-git-p4-block.sh create mode 100755 t/t9819-git-p4-case-folding.sh create mode 100755 t/t9820-git-p4-editor-handling.sh create mode 100755 t/t9821-git-p4-path-variations.sh create mode 100755 t/t9822-git-p4-path-encoding.sh create mode 100755 t/t9823-git-p4-mock-lfs.sh create mode 100755 t/t9824-git-p4-git-lfs.sh create mode 100755 t/t9825-git-p4-handle-utf16-without-bom.sh create mode 100755 t/t9826-git-p4-keep-empty-commits.sh create mode 100755 t/t9827-git-p4-change-filetype.sh create mode 100755 t/t9828-git-p4-map-user.sh create mode 100755 t/t9829-git-p4-jobs.sh create mode 100755 t/t9830-git-p4-symlink-dir.sh create mode 100755 t/t9831-git-p4-triggers.sh create mode 100755 t/t9832-unshelve.sh create mode 100755 t/t9833-errors.sh create mode 100755 t/t9834-git-p4-file-dir-bug.sh create mode 100755 t/t9835-git-p4-metadata-encoding-python2.sh create mode 100755 t/t9836-git-p4-metadata-encoding-python3.sh create mode 100755 t/t9850-shell.sh create mode 100755 t/t9901-git-web--browse.sh create mode 100755 t/t9902-completion.sh create mode 100755 t/t9903-bash-prompt.sh create mode 100644 t/test-binary-1.png create mode 100644 t/test-binary-2.png create mode 100644 t/test-lib-functions.sh create mode 100644 t/test-lib-github-workflow-markup.sh create mode 100644 t/test-lib-junit.sh create mode 100644 t/test-lib.sh create mode 100755 t/test-terminal.perl create mode 100644 t/unit-tests/.gitignore create mode 100644 t/unit-tests/clar/.editorconfig create mode 100644 t/unit-tests/clar/.github/workflows/ci.yml create mode 100644 t/unit-tests/clar/.gitignore create mode 100644 t/unit-tests/clar/CMakeLists.txt create mode 100644 t/unit-tests/clar/COPYING create mode 100644 t/unit-tests/clar/README.md create mode 100644 t/unit-tests/clar/clar.c create mode 100644 t/unit-tests/clar/clar.h create mode 100644 t/unit-tests/clar/clar/fixtures.h create mode 100644 t/unit-tests/clar/clar/fs.h create mode 100644 t/unit-tests/clar/clar/print.h create mode 100644 t/unit-tests/clar/clar/sandbox.h create mode 100644 t/unit-tests/clar/clar/summary.h create mode 100755 t/unit-tests/clar/generate.py create mode 100644 t/unit-tests/clar/test/CMakeLists.txt create mode 100644 t/unit-tests/clar/test/clar_test.h create mode 100644 t/unit-tests/clar/test/main.c create mode 100644 t/unit-tests/clar/test/main.c.sample create mode 100644 t/unit-tests/clar/test/resources/test/file create mode 100644 t/unit-tests/clar/test/sample.c create mode 100755 t/unit-tests/generate-clar-decls.sh create mode 100755 t/unit-tests/generate-clar-suites.sh create mode 100644 t/unit-tests/lib-oid.c create mode 100644 t/unit-tests/lib-oid.h create mode 100644 t/unit-tests/lib-reftable.c create mode 100644 t/unit-tests/lib-reftable.h create mode 100644 t/unit-tests/t-example-decorate.c create mode 100644 t/unit-tests/t-hashmap.c create mode 100644 t/unit-tests/t-oid-array.c create mode 100644 t/unit-tests/t-oidmap.c create mode 100644 t/unit-tests/t-oidtree.c create mode 100644 t/unit-tests/t-reftable-basics.c create mode 100644 t/unit-tests/t-reftable-block.c create mode 100644 t/unit-tests/t-reftable-merged.c create mode 100644 t/unit-tests/t-reftable-pq.c create mode 100644 t/unit-tests/t-reftable-reader.c create mode 100644 t/unit-tests/t-reftable-readwrite.c create mode 100644 t/unit-tests/t-reftable-record.c create mode 100644 t/unit-tests/t-reftable-stack.c create mode 100644 t/unit-tests/t-strbuf.c create mode 100644 t/unit-tests/t-strcmp-offset.c create mode 100644 t/unit-tests/t-trailer.c create mode 100644 t/unit-tests/t-urlmatch-normalization.c create mode 100644 t/unit-tests/test-lib.c create mode 100644 t/unit-tests/test-lib.h create mode 100644 t/unit-tests/u-ctype.c create mode 100644 t/unit-tests/u-hash.c create mode 100644 t/unit-tests/u-mem-pool.c create mode 100644 t/unit-tests/u-prio-queue.c create mode 100644 t/unit-tests/u-reftable-tree.c create mode 100644 t/unit-tests/u-strvec.c create mode 100644 t/unit-tests/unit-test.c create mode 100644 t/unit-tests/unit-test.h create mode 100644 t/valgrind/.gitignore create mode 100755 t/valgrind/analyze.sh create mode 100644 t/valgrind/default.supp create mode 100755 t/valgrind/valgrind.sh create mode 100644 tag.c create mode 100644 tag.h create mode 100644 tar.h create mode 100644 tempfile.c create mode 100644 tempfile.h create mode 100644 templates/.gitignore create mode 100644 templates/Makefile create mode 100644 templates/description create mode 100755 templates/hooks/applypatch-msg.sample create mode 100755 templates/hooks/commit-msg.sample create mode 100755 templates/hooks/fsmonitor-watchman.sample create mode 100644 templates/hooks/meson.build create mode 100755 templates/hooks/post-update.sample create mode 100755 templates/hooks/pre-applypatch.sample create mode 100755 templates/hooks/pre-commit.sample create mode 100755 templates/hooks/pre-merge-commit.sample create mode 100755 templates/hooks/pre-push.sample create mode 100755 templates/hooks/pre-rebase.sample create mode 100755 templates/hooks/pre-receive.sample create mode 100755 templates/hooks/prepare-commit-msg.sample create mode 100755 templates/hooks/push-to-checkout.sample create mode 100755 templates/hooks/sendemail-validate.sample create mode 100755 templates/hooks/update.sample create mode 100644 templates/info/exclude create mode 100644 templates/info/meson.build create mode 100644 templates/meson.build create mode 100644 thread-utils.c create mode 100644 thread-utils.h create mode 100644 tmp-objdir.c create mode 100644 tmp-objdir.h create mode 100644 trace.c create mode 100644 trace.h create mode 100644 trace2.c create mode 100644 trace2.h create mode 100644 trace2/tr2_cfg.c create mode 100644 trace2/tr2_cfg.h create mode 100644 trace2/tr2_cmd_name.c create mode 100644 trace2/tr2_cmd_name.h create mode 100644 trace2/tr2_ctr.c create mode 100644 trace2/tr2_ctr.h create mode 100644 trace2/tr2_dst.c create mode 100644 trace2/tr2_dst.h create mode 100644 trace2/tr2_sid.c create mode 100644 trace2/tr2_sid.h create mode 100644 trace2/tr2_sysenv.c create mode 100644 trace2/tr2_sysenv.h create mode 100644 trace2/tr2_tbuf.c create mode 100644 trace2/tr2_tbuf.h create mode 100644 trace2/tr2_tgt.h create mode 100644 trace2/tr2_tgt_event.c create mode 100644 trace2/tr2_tgt_normal.c create mode 100644 trace2/tr2_tgt_perf.c create mode 100644 trace2/tr2_tls.c create mode 100644 trace2/tr2_tls.h create mode 100644 trace2/tr2_tmr.c create mode 100644 trace2/tr2_tmr.h create mode 100644 trailer.c create mode 100644 trailer.h create mode 100644 transport-helper.c create mode 100644 transport-internal.h create mode 100644 transport.c create mode 100644 transport.h create mode 100644 tree-diff.c create mode 100644 tree-walk.c create mode 100644 tree-walk.h create mode 100644 tree.c create mode 100644 tree.h create mode 100644 unicode-width.h create mode 100644 unimplemented.sh create mode 100644 unix-socket.c create mode 100644 unix-socket.h create mode 100644 unix-stream-server.c create mode 100644 unix-stream-server.h create mode 100644 unpack-trees.c create mode 100644 unpack-trees.h create mode 100644 upload-pack.c create mode 100644 upload-pack.h create mode 100644 url.c create mode 100644 url.h create mode 100644 urlmatch.c create mode 100644 urlmatch.h create mode 100644 usage.c create mode 100644 userdiff.c create mode 100644 userdiff.h create mode 100644 utf8.c create mode 100644 utf8.h create mode 100644 varint.c create mode 100644 varint.h create mode 100644 version-def.h.in create mode 100644 version.c create mode 100644 version.h create mode 100644 versioncmp.c create mode 100644 versioncmp.h create mode 100644 walker.c create mode 100644 walker.h create mode 100644 wildmatch.c create mode 100644 wildmatch.h create mode 100644 worktree.c create mode 100644 worktree.h create mode 100644 wrapper.c create mode 100644 wrapper.h create mode 100644 write-or-die.c create mode 100644 write-or-die.h create mode 100644 ws.c create mode 100644 ws.h create mode 100644 wt-status.c create mode 100644 wt-status.h create mode 100644 xdiff-interface.c create mode 100644 xdiff-interface.h create mode 100644 xdiff/xdiff.h create mode 100644 xdiff/xdiffi.c create mode 100644 xdiff/xdiffi.h create mode 100644 xdiff/xemit.c create mode 100644 xdiff/xemit.h create mode 100644 xdiff/xhistogram.c create mode 100644 xdiff/xinclude.h create mode 100644 xdiff/xmacros.h create mode 100644 xdiff/xmerge.c create mode 100644 xdiff/xpatience.c create mode 100644 xdiff/xprepare.c create mode 100644 xdiff/xprepare.h create mode 100644 xdiff/xtypes.h create mode 100644 xdiff/xutils.c create mode 100644 xdiff/xutils.h diff --git a/.cirrus.yml b/.cirrus.yml new file mode 100644 index 0000000000..1fbdc2652b --- /dev/null +++ b/.cirrus.yml @@ -0,0 +1,22 @@ +env: + CIRRUS_CLONE_DEPTH: 1 + +freebsd_task: + env: + GIT_PROVE_OPTS: "--timer --jobs 10" + GIT_TEST_OPTS: "--no-chain-lint --no-bin-wrappers" + MAKEFLAGS: "-j4" + DEFAULT_TEST_TARGET: prove + DEVELOPER: 1 + freebsd_instance: + image_family: freebsd-13-4 + memory: 2G + install_script: + pkg install -y gettext gmake perl5 + create_user_script: + - pw useradd git + - chown -R git:git . + build_script: + - su git -c gmake + test_script: + - su git -c 'gmake DEFAULT_UNIT_TEST_TARGET=unit-tests-prove test unit-tests' diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000000..9547fe1b77 --- /dev/null +++ b/.clang-format @@ -0,0 +1,225 @@ +# This file is an example configuration for clang-format 5.0. +# +# Note that this style definition should only be understood as a hint +# for writing new code. The rules are still work-in-progress and does +# not yet exactly match the style we have in the existing code. + +# Use tabs whenever we need to fill whitespace that spans at least from one tab +# stop to the next one. +# +# These settings are mirrored in .editorconfig. Keep them in sync. +UseTab: Always +TabWidth: 8 +IndentWidth: 8 +ContinuationIndentWidth: 8 +ColumnLimit: 80 + +# C Language specifics +Language: Cpp + +# Align parameters on the open bracket +# someLongFunction(argument1, +# argument2); +AlignAfterOpenBracket: Align + +# Don't align consecutive assignments +# int aaaa = 12; +# int b = 14; +AlignConsecutiveAssignments: false + +# Don't align consecutive declarations +# int aaaa = 12; +# double b = 3.14; +AlignConsecutiveDeclarations: false + +# Align consecutive macro definitions. +AlignConsecutiveMacros: true + +# Align escaped newlines as far left as possible +# #define A \ +# int aaaa; \ +# int b; \ +# int cccccccc; +AlignEscapedNewlines: Left + +# Align operands of binary and ternary expressions +# int aaa = bbbbbbbbbbb + +# cccccc; +AlignOperands: true + +# Don't align trailing comments +# int a; // Comment a +# int b = 2; // Comment b +AlignTrailingComments: false + +# By default don't allow putting parameters onto the next line +# myFunction(foo, bar, baz); +AllowAllParametersOfDeclarationOnNextLine: false + +# Don't allow short braced statements to be on a single line +# if (a) not if (a) return; +# return; +AllowShortBlocksOnASingleLine: false +AllowShortCaseLabelsOnASingleLine: false +AllowShortFunctionsOnASingleLine: false +AllowShortIfStatementsOnASingleLine: false +AllowShortLoopsOnASingleLine: false + +# By default don't add a line break after the return type of top-level functions +# int foo(); +AlwaysBreakAfterReturnType: None + +# Pack as many parameters or arguments onto the same line as possible +# int myFunction(int aaaaaaaaaaaa, int bbbbbbbb, +# int cccc); +BinPackArguments: true +BinPackParameters: true + +# Add no space around the bit field +# unsigned bf:2; +BitFieldColonSpacing: None + +# Attach braces to surrounding context except break before braces on function +# definitions. +# void foo() +# { +# if (true) { +# } else { +# } +# }; +BreakBeforeBraces: Linux + +# Break after operators +# int value = aaaaaaaaaaaaa + +# bbbbbb - +# ccccccccccc; +BreakBeforeBinaryOperators: None +BreakBeforeTernaryOperators: false + +# Don't break string literals +BreakStringLiterals: false + +# Use the same indentation level as for the switch statement. +# Switch statement body is always indented one level more than case labels. +IndentCaseLabels: false + +# Indents directives before the hash. Each level uses a single space for +# indentation. +# #if FOO +# # include +# #endif +IndentPPDirectives: AfterHash +PPIndentWidth: 1 + +# Don't indent a function definition or declaration if it is wrapped after the +# type +IndentWrappedFunctionNames: false + +# Align pointer to the right +# int *a; +PointerAlignment: Right + +# Don't insert a space after a cast +# x = (int32)y; not x = (int32) y; +SpaceAfterCStyleCast: false + +# No space is inserted after the logical not operator +SpaceAfterLogicalNot: false + +# Insert spaces before and after assignment operators +# int a = 5; not int a=5; +# a += 42; a+=42; +SpaceBeforeAssignmentOperators: true + +# Spaces will be removed before case colon. +# case 1: break; not case 1 : break; +SpaceBeforeCaseColon: false + +# Put a space before opening parentheses only after control statement keywords. +# void f() { +# if (true) { +# f(); +# } +# } +SpaceBeforeParens: ControlStatements + +# Don't insert spaces inside empty '()' +SpaceInEmptyParentheses: false + +# No space before first '[' in arrays +# int a[5][5]; not int a [5][5]; +SpaceBeforeSquareBrackets: false + +# No space will be inserted into {} +# while (true) {} not while (true) { } +SpaceInEmptyBlock: false + +# The number of spaces before trailing line comments (// - comments). +# This does not affect trailing block comments (/* - comments). +SpacesBeforeTrailingComments: 1 + +# Don't insert spaces in casts +# x = (int32) y; not x = ( int32 ) y; +SpacesInCStyleCastParentheses: false + +# Don't insert spaces inside container literals +# var arr = [1, 2, 3]; not var arr = [ 1, 2, 3 ]; +SpacesInContainerLiterals: false + +# Don't insert spaces after '(' or before ')' +# f(arg); not f( arg ); +SpacesInParentheses: false + +# Don't insert spaces after '[' or before ']' +# int a[5]; not int a[ 5 ]; +SpacesInSquareBrackets: false + +# Insert a space after '{' and before '}' in struct initializers +Cpp11BracedListStyle: false + +# A list of macros that should be interpreted as foreach loops instead of as +# function calls. Taken from: +# git grep -h '^#define [^[:space:]]*for_\?each[^[:space:]]*(' | +# sed "s/^#define / - '/; s/(.*$/'/" | sort | uniq +ForEachMacros: + - 'for_each_builtin' + - 'for_each_string_list_item' + - 'for_each_ut' + - 'for_each_wanted_builtin' + - 'hashmap_for_each_entry' + - 'hashmap_for_each_entry_from' + - 'kh_foreach' + - 'kh_foreach_value' + - 'list_for_each' + - 'list_for_each_dir' + - 'list_for_each_prev' + - 'list_for_each_prev_safe' + - 'list_for_each_safe' + - 'strintmap_for_each_entry' + - 'strmap_for_each_entry' + - 'strset_for_each_entry' + +# A list of macros that should be interpreted as conditionals instead of as +# function calls. +IfMacros: + - 'if_test' + +# The maximum number of consecutive empty lines to keep. +MaxEmptyLinesToKeep: 1 + +# No empty line at the start of a block. +KeepEmptyLinesAtTheStartOfBlocks: false + +# Penalties +# This decides what order things should be done if a line is too long +PenaltyBreakAssignment: 5 +PenaltyBreakBeforeFirstCallParameter: 5 +PenaltyBreakComment: 5 +PenaltyBreakFirstLessLess: 0 +PenaltyBreakOpenParenthesis: 300 +PenaltyBreakString: 5 +PenaltyExcessCharacter: 10 +PenaltyReturnTypeOnItsOwnLine: 300 + +# Don't sort #include's +SortIncludes: false diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000000..15d6cbeab1 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,16 @@ +[*] +charset = utf-8 +insert_final_newline = true + +# The settings for C (*.c and *.h) files are mirrored in .clang-format. Keep +# them in sync. +[{*.{c,h,sh,perl,pl,pm,txt},config.mak.*,Makefile}] +indent_style = tab +tab_width = 8 + +[*.py] +indent_style = space +indent_size = 4 + +[COMMIT_EDITMSG] +max_line_length = 72 diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000000..158c3d45c4 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,18 @@ +* whitespace=!indent,trail,space +*.[ch] whitespace=indent,trail,space diff=cpp +*.sh whitespace=indent,trail,space text eol=lf +*.perl text eol=lf diff=perl +*.pl text eof=lf diff=perl +*.pm text eol=lf diff=perl +*.py text eol=lf diff=python +*.bat text eol=crlf +CODE_OF_CONDUCT.md -whitespace +/Documentation/**/*.txt text eol=lf +/command-list.txt text eol=lf +/GIT-VERSION-GEN text eol=lf +/mergetools/* text eol=lf +/t/oid-info/* text eol=lf +/Documentation/git-merge.txt conflict-marker-size=32 +/Documentation/gitk.txt conflict-marker-size=32 +/Documentation/user-manual.txt conflict-marker-size=32 +/t/t????-*.sh conflict-marker-size=32 diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md new file mode 100644 index 0000000000..c8755e38de --- /dev/null +++ b/.github/CONTRIBUTING.md @@ -0,0 +1,22 @@ +## Contributing to Git + +Thanks for taking the time to contribute to Git! Please be advised that the +Git community does not use github.com for their contributions. Instead, we use +a mailing list (git@vger.kernel.org) for code submissions, code +reviews, and bug reports. + +Nevertheless, you can use [GitGitGadget](https://gitgitgadget.github.io/) to +conveniently send your Pull Requests commits to our mailing list. + +Please read ["A note from the maintainer"](https://git.kernel.org/pub/scm/git/git.git/plain/MaintNotes?h=todo) +to learn how the Git project is managed, and how you can work with it. +In addition, we highly recommend you to read [our submission guidelines](../Documentation/SubmittingPatches). + +If you prefer video, then [this talk](https://www.youtube.com/watch?v=Q7i_qQW__q4&feature=youtu.be&t=6m4s) +might be useful to you as the presenter walks you through the contribution +process by example. + +Or, you can follow the ["My First Contribution"](https://git-scm.com/docs/MyFirstContribution) +tutorial for another example of the contribution process. + +Your friendly Git community! diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000000..37654cdfd7 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,10 @@ +Thanks for taking the time to contribute to Git! Please be advised that the +Git community does not use github.com for their contributions. Instead, we use +a mailing list (git@vger.kernel.org) for code submissions, code reviews, and +bug reports. Nevertheless, you can use GitGitGadget (https://gitgitgadget.github.io/) +to conveniently send your Pull Requests commits to our mailing list. + +For a single-commit pull request, please *leave the pull request description +empty*: your commit message itself should describe your changes. + +Please read the "guidelines for contributing" linked above! diff --git a/.github/workflows/check-style.yml b/.github/workflows/check-style.yml new file mode 100644 index 0000000000..c052a5df23 --- /dev/null +++ b/.github/workflows/check-style.yml @@ -0,0 +1,34 @@ +name: check-style + +# Get the repository with all commits to ensure that we can analyze +# all of the commits contributed via the Pull Request. + +on: + pull_request: + types: [opened, synchronize] + +# Avoid unnecessary builds. Unlike the main CI jobs, these are not +# ci-configurable (but could be). +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + check-style: + env: + CC: clang + jobname: ClangFormat + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - run: ci/install-dependencies.sh + + - name: git clang-format + continue-on-error: true + id: check_out + run: | + ./ci/run-style-check.sh \ + "${{github.event.pull_request.base.sha}}" diff --git a/.github/workflows/check-whitespace.yml b/.github/workflows/check-whitespace.yml new file mode 100644 index 0000000000..d0a78fc426 --- /dev/null +++ b/.github/workflows/check-whitespace.yml @@ -0,0 +1,32 @@ +name: check-whitespace + +# Get the repository with all commits to ensure that we can analyze +# all of the commits contributed via the Pull Request. +# Process `git log --check` output to extract just the check errors. +# Exit with failure upon white-space issues. + +on: + pull_request: + types: [opened, synchronize] + +# Avoid unnecessary builds. Unlike the main CI jobs, these are not +# ci-configurable (but could be). +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + check-whitespace: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: git log --check + id: check_out + run: | + ./ci/check-whitespace.sh \ + "${{github.event.pull_request.base.sha}}" \ + "$GITHUB_STEP_SUMMARY" \ + "https://github.com/${{github.repository}}" diff --git a/.github/workflows/coverity.yml b/.github/workflows/coverity.yml new file mode 100644 index 0000000000..48341e81f4 --- /dev/null +++ b/.github/workflows/coverity.yml @@ -0,0 +1,163 @@ +name: Coverity + +# This GitHub workflow automates submitting builds to Coverity Scan. To enable it, +# set the repository variable `ENABLE_COVERITY_SCAN_FOR_BRANCHES` (for details, see +# https://docs.github.com/en/actions/learn-github-actions/variables) to a JSON +# string array containing the names of the branches for which the workflow should be +# run, e.g. `["main", "next"]`. +# +# In addition, two repository secrets must be set (for details how to add secrets, see +# https://docs.github.com/en/actions/security-guides/using-secrets-in-github-actions): +# `COVERITY_SCAN_EMAIL` and `COVERITY_SCAN_TOKEN`. The former specifies the +# email to which the Coverity reports should be sent and the latter can be +# obtained from the Project Settings tab of the Coverity project). +# +# The workflow runs on `ubuntu-latest` by default. This can be overridden by setting +# the repository variable `ENABLE_COVERITY_SCAN_ON_OS` to a JSON string array specifying +# the operating systems, e.g. `["ubuntu-latest", "windows-latest"]`. +# +# By default, the builds are submitted to the Coverity project `git`. To override this, +# set the repository variable `COVERITY_PROJECT`. + +on: + push: + +defaults: + run: + shell: bash + +jobs: + coverity: + if: contains(fromJSON(vars.ENABLE_COVERITY_SCAN_FOR_BRANCHES || '[""]'), github.ref_name) + strategy: + matrix: + os: ${{ fromJSON(vars.ENABLE_COVERITY_SCAN_ON_OS || '["ubuntu-latest"]') }} + runs-on: ${{ matrix.os }} + env: + COVERITY_PROJECT: ${{ vars.COVERITY_PROJECT || 'git' }} + COVERITY_LANGUAGE: cxx + COVERITY_PLATFORM: overridden-below + steps: + - uses: actions/checkout@v4 + - name: install minimal Git for Windows SDK + if: contains(matrix.os, 'windows') + uses: git-for-windows/setup-git-for-windows-sdk@v1 + - run: ci/install-dependencies.sh + if: contains(matrix.os, 'ubuntu') || contains(matrix.os, 'macos') + env: + distro: ${{ matrix.os }} + + # The Coverity site says the tool is usually updated twice yearly, so the + # MD5 of download can be used to determine whether there's been an update. + - name: get the Coverity Build Tool hash + id: lookup + run: | + case "${{ matrix.os }}" in + *windows*) + COVERITY_PLATFORM=win64 + COVERITY_TOOL_FILENAME=cov-analysis.zip + MAKEFLAGS=-j$(nproc) + ;; + *macos*) + COVERITY_PLATFORM=macOSX + COVERITY_TOOL_FILENAME=cov-analysis.dmg + MAKEFLAGS=-j$(sysctl -n hw.physicalcpu) + ;; + *ubuntu*) + COVERITY_PLATFORM=linux64 + COVERITY_TOOL_FILENAME=cov-analysis.tgz + MAKEFLAGS=-j$(nproc) + ;; + *) + echo '::error::unhandled OS ${{ matrix.os }}' >&2 + exit 1 + ;; + esac + echo "COVERITY_PLATFORM=$COVERITY_PLATFORM" >>$GITHUB_ENV + echo "COVERITY_TOOL_FILENAME=$COVERITY_TOOL_FILENAME" >>$GITHUB_ENV + echo "MAKEFLAGS=$MAKEFLAGS" >>$GITHUB_ENV + MD5=$(curl https://scan.coverity.com/download/$COVERITY_LANGUAGE/$COVERITY_PLATFORM \ + --fail \ + --form token='${{ secrets.COVERITY_SCAN_TOKEN }}' \ + --form project="$COVERITY_PROJECT" \ + --form md5=1) + case $? in + 0) ;; # okay + 22) # 40x, i.e. access denied + echo "::error::incorrect token or project?" >&2 + exit 1 + ;; + *) # other error + echo "::error::Failed to retrieve MD5" >&2 + exit 1 + ;; + esac + echo "hash=$MD5" >>$GITHUB_OUTPUT + + # Try to cache the tool to avoid downloading 1GB+ on every run. + # A cache miss will add ~30s to create, but a cache hit will save minutes. + - name: restore the Coverity Build Tool + id: cache + uses: actions/cache/restore@v4 + with: + path: ${{ runner.temp }}/cov-analysis + key: cov-build-${{ env.COVERITY_LANGUAGE }}-${{ env.COVERITY_PLATFORM }}-${{ steps.lookup.outputs.hash }} + - name: download the Coverity Build Tool (${{ env.COVERITY_LANGUAGE }} / ${{ env.COVERITY_PLATFORM}}) + if: steps.cache.outputs.cache-hit != 'true' + run: | + curl https://scan.coverity.com/download/$COVERITY_LANGUAGE/$COVERITY_PLATFORM \ + --fail --no-progress-meter \ + --output $RUNNER_TEMP/$COVERITY_TOOL_FILENAME \ + --form token='${{ secrets.COVERITY_SCAN_TOKEN }}' \ + --form project="$COVERITY_PROJECT" + - name: extract the Coverity Build Tool + if: steps.cache.outputs.cache-hit != 'true' + run: | + case "$COVERITY_TOOL_FILENAME" in + *.tgz) + mkdir $RUNNER_TEMP/cov-analysis && + tar -xzf $RUNNER_TEMP/$COVERITY_TOOL_FILENAME --strip 1 -C $RUNNER_TEMP/cov-analysis + ;; + *.dmg) + cd $RUNNER_TEMP && + attach="$(hdiutil attach $COVERITY_TOOL_FILENAME)" && + volume="$(echo "$attach" | cut -f 3 | grep /Volumes/)" && + mkdir cov-analysis && + cd cov-analysis && + sh "$volume"/cov-analysis-macosx-*.sh && + ls -l && + hdiutil detach "$volume" + ;; + *.zip) + cd $RUNNER_TEMP && + mkdir cov-analysis-tmp && + unzip -d cov-analysis-tmp $COVERITY_TOOL_FILENAME && + mv cov-analysis-tmp/* cov-analysis + ;; + *) + echo "::error::unhandled archive type: $COVERITY_TOOL_FILENAME" >&2 + exit 1 + ;; + esac + - name: cache the Coverity Build Tool + if: steps.cache.outputs.cache-hit != 'true' + uses: actions/cache/save@v4 + with: + path: ${{ runner.temp }}/cov-analysis + key: cov-build-${{ env.COVERITY_LANGUAGE }}-${{ env.COVERITY_PLATFORM }}-${{ steps.lookup.outputs.hash }} + - name: build with cov-build + run: | + export PATH="$RUNNER_TEMP/cov-analysis/bin:$PATH" && + cov-configure --gcc && + cov-build --dir cov-int make + - name: package the build + run: tar -czvf cov-int.tgz cov-int + - name: submit the build to Coverity Scan + run: | + curl \ + --fail \ + --form token='${{ secrets.COVERITY_SCAN_TOKEN }}' \ + --form email='${{ secrets.COVERITY_SCAN_EMAIL }}' \ + --form file=@cov-int.tgz \ + --form version='${{ github.sha }}' \ + "https://scan.coverity.com/builds?project=$COVERITY_PROJECT" diff --git a/.github/workflows/l10n.yml b/.github/workflows/l10n.yml new file mode 100644 index 0000000000..e2c3dbdcb5 --- /dev/null +++ b/.github/workflows/l10n.yml @@ -0,0 +1,111 @@ +name: git-l10n + +on: [push, pull_request_target] + +# Avoid unnecessary builds. Unlike the main CI jobs, these are not +# ci-configurable (but could be). +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + git-po-helper: + if: >- + endsWith(github.repository, '/git-po') || + contains(github.head_ref, 'l10n') || + contains(github.ref, 'l10n') + runs-on: ubuntu-latest + permissions: + pull-requests: write + steps: + - name: Setup base and head objects + id: setup-tips + run: | + if test "${{ github.event_name }}" = "pull_request_target" + then + base=${{ github.event.pull_request.base.sha }} + head=${{ github.event.pull_request.head.sha }} + else + base=${{ github.event.before }} + head=${{ github.event.after }} + fi + echo base=$base >>$GITHUB_OUTPUT + echo head=$head >>$GITHUB_OUTPUT + - name: Run partial clone + run: | + git -c init.defaultBranch=master init --bare . + git remote add \ + --mirror=fetch \ + origin \ + https://github.com/${{ github.repository }} + # Fetch tips that may be unreachable from github.ref: + # - For a forced push, "$base" may be unreachable. + # - For a "pull_request_target" event, "$head" may be unreachable. + args= + for commit in \ + ${{ steps.setup-tips.outputs.base }} \ + ${{ steps.setup-tips.outputs.head }} + do + case $commit in + *[^0]*) + args="$args $commit" + ;; + *) + # Should not fetch ZERO-OID. + ;; + esac + done + git -c protocol.version=2 fetch \ + --progress \ + --no-tags \ + --no-write-fetch-head \ + --filter=blob:none \ + origin \ + ${{ github.ref }} \ + $args + - uses: actions/setup-go@v5 + with: + go-version: '>=1.16' + cache: false + - name: Install git-po-helper + run: go install github.com/git-l10n/git-po-helper@main + - name: Install other dependencies + run: | + sudo apt-get update -q && + sudo apt-get install -q -y gettext + - name: Run git-po-helper + id: check-commits + run: | + exit_code=0 + git-po-helper check-commits \ + --github-action-event="${{ github.event_name }}" -- \ + ${{ steps.setup-tips.outputs.base }}..${{ steps.setup-tips.outputs.head }} \ + >git-po-helper.out 2>&1 || exit_code=$? + if test $exit_code -ne 0 || grep -q WARNING git-po-helper.out + then + # Remove ANSI colors which are proper for console logs but not + # proper for PR comment. + echo "COMMENT_BODY<>$GITHUB_ENV + perl -pe 's/\e\[[0-9;]*m//g; s/\bEOF$//g' git-po-helper.out >>$GITHUB_ENV + echo "EOF" >>$GITHUB_ENV + fi + cat git-po-helper.out + exit $exit_code + - name: Create comment in pull request for report + uses: mshick/add-pr-comment@v2 + if: >- + always() && + github.event_name == 'pull_request_target' && + env.COMMENT_BODY != '' + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + message: > + ${{ steps.check-commits.outcome == 'failure' && 'Errors and warnings' || 'Warnings' }} + found by [git-po-helper](https://github.com/git-l10n/git-po-helper#readme) in workflow + [#${{ github.run_number }}](${{ env.GITHUB_SERVER_URL }}/${{ github.repository }}/actions/runs/${{ github.run_id }}): + + ``` + + ${{ env.COMMENT_BODY }} + + ``` diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000000..900be9957a --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,434 @@ +name: CI + +on: [push, pull_request] + +env: + DEVELOPER: 1 + +# If more than one workflow run is triggered for the very same commit hash +# (which happens when multiple branches pointing to the same commit), only +# the first one is allowed to run, the second will be kept in the "queued" +# state. This allows a successful completion of the first run to be reused +# in the second run via the `skip-if-redundant` logic in the `config` job. +# +# The only caveat is that if a workflow run is triggered for the same commit +# hash that another run is already being held, that latter run will be +# canceled. For more details about the `concurrency` attribute, see: +# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#concurrency +concurrency: + group: ${{ github.sha }} + +jobs: + ci-config: + name: config + if: vars.CI_BRANCHES == '' || contains(vars.CI_BRANCHES, github.ref_name) + runs-on: ubuntu-latest + outputs: + enabled: ${{ steps.check-ref.outputs.enabled }}${{ steps.skip-if-redundant.outputs.enabled }} + skip_concurrent: ${{ steps.check-ref.outputs.skip_concurrent }} + steps: + - name: try to clone ci-config branch + run: | + git -c protocol.version=2 clone \ + --no-tags \ + --single-branch \ + -b ci-config \ + --depth 1 \ + --no-checkout \ + --filter=blob:none \ + https://github.com/${{ github.repository }} \ + config-repo && + cd config-repo && + git checkout HEAD -- ci/config || : ignore + - id: check-ref + name: check whether CI is enabled for ref + run: | + enabled=yes + if test -x config-repo/ci/config/allow-ref + then + echo "::warning::ci/config/allow-ref is deprecated; use CI_BRANCHES instead" + if ! config-repo/ci/config/allow-ref '${{ github.ref }}' + then + enabled=no + fi + fi + + skip_concurrent=yes + if test -x config-repo/ci/config/skip-concurrent && + ! config-repo/ci/config/skip-concurrent '${{ github.ref }}' + then + skip_concurrent=no + fi + echo "enabled=$enabled" >>$GITHUB_OUTPUT + echo "skip_concurrent=$skip_concurrent" >>$GITHUB_OUTPUT + - name: skip if the commit or tree was already tested + id: skip-if-redundant + uses: actions/github-script@v7 + if: steps.check-ref.outputs.enabled == 'yes' + with: + github-token: ${{secrets.GITHUB_TOKEN}} + script: | + try { + // Figure out workflow ID, commit and tree + const { data: run } = await github.rest.actions.getWorkflowRun({ + owner: context.repo.owner, + repo: context.repo.repo, + run_id: context.runId, + }); + const workflow_id = run.workflow_id; + const head_sha = run.head_sha; + const tree_id = run.head_commit.tree_id; + + // See whether there is a successful run for that commit or tree + const { data: runs } = await github.rest.actions.listWorkflowRuns({ + owner: context.repo.owner, + repo: context.repo.repo, + per_page: 500, + status: 'success', + workflow_id, + }); + for (const run of runs.workflow_runs) { + if (head_sha === run.head_sha) { + core.warning(`Successful run for the commit ${head_sha}: ${run.html_url}`); + core.setOutput('enabled', ' but skip'); + break; + } + if (run.head_commit && tree_id === run.head_commit.tree_id) { + core.warning(`Successful run for the tree ${tree_id}: ${run.html_url}`); + core.setOutput('enabled', ' but skip'); + break; + } + } + } catch (e) { + core.warning(e); + } + + windows-build: + name: win build + needs: ci-config + if: needs.ci-config.outputs.enabled == 'yes' + runs-on: windows-latest + concurrency: + group: windows-build-${{ github.ref }} + cancel-in-progress: ${{ needs.ci-config.outputs.skip_concurrent == 'yes' }} + steps: + - uses: actions/checkout@v4 + - uses: git-for-windows/setup-git-for-windows-sdk@v1 + - name: build + shell: bash + env: + HOME: ${{runner.workspace}} + NO_PERL: 1 + run: . /etc/profile && ci/make-test-artifacts.sh artifacts + - name: zip up tracked files + run: git archive -o artifacts/tracked.tar.gz HEAD + - name: upload tracked files and build artifacts + uses: actions/upload-artifact@v4 + with: + name: windows-artifacts + path: artifacts + windows-test: + name: win test + runs-on: windows-latest + needs: [ci-config, windows-build] + strategy: + fail-fast: false + matrix: + nr: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] + concurrency: + group: windows-test-${{ matrix.nr }}-${{ github.ref }} + cancel-in-progress: ${{ needs.ci-config.outputs.skip_concurrent == 'yes' }} + steps: + - name: download tracked files and build artifacts + uses: actions/download-artifact@v4 + with: + name: windows-artifacts + path: ${{github.workspace}} + - name: extract tracked files and build artifacts + shell: bash + run: tar xf artifacts.tar.gz && tar xf tracked.tar.gz + - uses: git-for-windows/setup-git-for-windows-sdk@v1 + - name: test + shell: bash + run: . /etc/profile && ci/run-test-slice.sh ${{matrix.nr}} 10 + - name: print test failures + if: failure() && env.FAILED_TEST_ARTIFACTS != '' + shell: bash + run: ci/print-test-failures.sh + - name: Upload failed tests' directories + if: failure() && env.FAILED_TEST_ARTIFACTS != '' + uses: actions/upload-artifact@v4 + with: + name: failed-tests-windows-${{ matrix.nr }} + path: ${{env.FAILED_TEST_ARTIFACTS}} + vs-build: + name: win+VS build + needs: ci-config + if: github.event.repository.owner.login == 'git-for-windows' && needs.ci-config.outputs.enabled == 'yes' + env: + NO_PERL: 1 + GIT_CONFIG_PARAMETERS: "'user.name=CI' 'user.email=ci@git'" + runs-on: windows-latest + concurrency: + group: vs-build-${{ github.ref }} + cancel-in-progress: ${{ needs.ci-config.outputs.skip_concurrent == 'yes' }} + steps: + - uses: actions/checkout@v4 + - uses: git-for-windows/setup-git-for-windows-sdk@v1 + - name: initialize vcpkg + uses: actions/checkout@v4 + with: + repository: 'microsoft/vcpkg' + path: 'compat/vcbuild/vcpkg' + - name: download vcpkg artifacts + uses: git-for-windows/get-azure-pipelines-artifact@v0 + with: + repository: git/git + definitionId: 9 + - name: add msbuild to PATH + uses: microsoft/setup-msbuild@v2 + - name: copy dlls to root + shell: cmd + run: compat\vcbuild\vcpkg_copy_dlls.bat release + - name: generate Visual Studio solution + shell: bash + run: | + cmake `pwd`/contrib/buildsystems/ -DCMAKE_PREFIX_PATH=`pwd`/compat/vcbuild/vcpkg/installed/x64-windows \ + -DNO_GETTEXT=YesPlease -DPERL_TESTS=OFF -DPYTHON_TESTS=OFF -DCURL_NO_CURL_CMAKE=ON + - name: MSBuild + run: msbuild git.sln -property:Configuration=Release -property:Platform=x64 -maxCpuCount:4 -property:PlatformToolset=v142 + - name: bundle artifact tar + shell: bash + env: + MSVC: 1 + VCPKG_ROOT: ${{github.workspace}}\compat\vcbuild\vcpkg + run: | + mkdir -p artifacts && + eval "$(make -n artifacts-tar INCLUDE_DLLS_IN_ARTIFACTS=YesPlease ARTIFACTS_DIRECTORY=artifacts NO_GETTEXT=YesPlease 2>&1 | grep ^tar)" + - name: zip up tracked files + run: git archive -o artifacts/tracked.tar.gz HEAD + - name: upload tracked files and build artifacts + uses: actions/upload-artifact@v4 + with: + name: vs-artifacts + path: artifacts + vs-test: + name: win+VS test + runs-on: windows-latest + needs: [ci-config, vs-build] + strategy: + fail-fast: false + matrix: + nr: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] + concurrency: + group: vs-test-${{ matrix.nr }}-${{ github.ref }} + cancel-in-progress: ${{ needs.ci-config.outputs.skip_concurrent == 'yes' }} + steps: + - uses: git-for-windows/setup-git-for-windows-sdk@v1 + - name: download tracked files and build artifacts + uses: actions/download-artifact@v4 + with: + name: vs-artifacts + path: ${{github.workspace}} + - name: extract tracked files and build artifacts + shell: bash + run: tar xf artifacts.tar.gz && tar xf tracked.tar.gz + - name: test + shell: bash + env: + NO_SVN_TESTS: 1 + run: . /etc/profile && ci/run-test-slice.sh ${{matrix.nr}} 10 + - name: print test failures + if: failure() && env.FAILED_TEST_ARTIFACTS != '' + shell: bash + run: ci/print-test-failures.sh + - name: Upload failed tests' directories + if: failure() && env.FAILED_TEST_ARTIFACTS != '' + uses: actions/upload-artifact@v4 + with: + name: failed-tests-windows-vs-${{ matrix.nr }} + path: ${{env.FAILED_TEST_ARTIFACTS}} + regular: + name: ${{matrix.vector.jobname}} (${{matrix.vector.pool}}) + needs: ci-config + if: needs.ci-config.outputs.enabled == 'yes' + concurrency: + group: ${{ matrix.vector.jobname }}-${{ matrix.vector.pool }}-${{ github.ref }} + cancel-in-progress: ${{ needs.ci-config.outputs.skip_concurrent == 'yes' }} + strategy: + fail-fast: false + matrix: + vector: + - jobname: linux-sha256 + cc: clang + pool: ubuntu-latest + - jobname: linux-reftable + cc: clang + pool: ubuntu-latest + - jobname: linux-gcc + cc: gcc + cc_package: gcc-8 + pool: ubuntu-20.04 + - jobname: linux-TEST-vars + cc: gcc + cc_package: gcc-8 + pool: ubuntu-20.04 + - jobname: osx-clang + cc: clang + pool: macos-13 + - jobname: osx-reftable + cc: clang + pool: macos-13 + - jobname: osx-gcc + cc: gcc-13 + pool: macos-13 + - jobname: osx-meson + cc: clang + pool: macos-13 + - jobname: linux-gcc-default + cc: gcc + pool: ubuntu-latest + - jobname: linux-leaks + cc: gcc + pool: ubuntu-latest + - jobname: linux-reftable-leaks + cc: gcc + pool: ubuntu-latest + - jobname: linux-asan-ubsan + cc: clang + pool: ubuntu-latest + - jobname: linux-meson + cc: gcc + pool: ubuntu-latest + env: + CC: ${{matrix.vector.cc}} + CC_PACKAGE: ${{matrix.vector.cc_package}} + jobname: ${{matrix.vector.jobname}} + distro: ${{matrix.vector.pool}} + TEST_OUTPUT_DIRECTORY: ${{github.workspace}}/t + runs-on: ${{matrix.vector.pool}} + steps: + - uses: actions/checkout@v4 + - run: ci/install-dependencies.sh + - run: ci/run-build-and-tests.sh + - name: print test failures + if: failure() && env.FAILED_TEST_ARTIFACTS != '' + run: ci/print-test-failures.sh + - name: Upload failed tests' directories + if: failure() && env.FAILED_TEST_ARTIFACTS != '' + uses: actions/upload-artifact@v4 + with: + name: failed-tests-${{matrix.vector.jobname}} + path: ${{env.FAILED_TEST_ARTIFACTS}} + fuzz-smoke-test: + name: fuzz smoke test + needs: ci-config + if: needs.ci-config.outputs.enabled == 'yes' + env: + CC: clang + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - run: ci/install-dependencies.sh + - run: ci/run-build-and-minimal-fuzzers.sh + dockerized: + name: ${{matrix.vector.jobname}} (${{matrix.vector.image}}) + needs: ci-config + if: needs.ci-config.outputs.enabled == 'yes' + concurrency: + group: dockerized-${{ matrix.vector.jobname }}-${{ matrix.vector.image }}-${{ github.ref }} + cancel-in-progress: ${{ needs.ci-config.outputs.skip_concurrent == 'yes' }} + strategy: + fail-fast: false + matrix: + vector: + - jobname: linux-musl + image: alpine + distro: alpine-latest + # Supported until 2025-04-02. + - jobname: linux32 + image: i386/ubuntu:focal + distro: ubuntu32-20.04 + - jobname: pedantic + image: fedora + distro: fedora-latest + # A RHEL 8 compatible distro. Supported until 2029-05-31. + - jobname: almalinux-8 + image: almalinux:8 + distro: almalinux-8 + # Supported until 2026-08-31. + - jobname: debian-11 + image: debian:11 + distro: debian-11 + env: + jobname: ${{matrix.vector.jobname}} + distro: ${{matrix.vector.distro}} + runs-on: ubuntu-latest + container: ${{matrix.vector.image}} + steps: + - name: prepare libc6 for actions + if: matrix.vector.jobname == 'linux32' + run: apt -q update && apt -q -y install libc6-amd64 lib64stdc++6 + - uses: actions/checkout@v4 + - run: ci/install-dependencies.sh + - run: ci/run-build-and-tests.sh + - name: print test failures + if: failure() && env.FAILED_TEST_ARTIFACTS != '' + run: ci/print-test-failures.sh + - name: Upload failed tests' directories + if: failure() && env.FAILED_TEST_ARTIFACTS != '' + uses: actions/upload-artifact@v4 + with: + name: failed-tests-${{matrix.vector.jobname}} + path: ${{env.FAILED_TEST_ARTIFACTS}} + static-analysis: + needs: ci-config + if: needs.ci-config.outputs.enabled == 'yes' + env: + jobname: StaticAnalysis + runs-on: ubuntu-22.04 + concurrency: + group: static-analysis-${{ github.ref }} + cancel-in-progress: ${{ needs.ci-config.outputs.skip_concurrent == 'yes' }} + steps: + - uses: actions/checkout@v4 + - run: ci/install-dependencies.sh + - run: ci/run-static-analysis.sh + - run: ci/check-directional-formatting.bash + sparse: + needs: ci-config + if: needs.ci-config.outputs.enabled == 'yes' + env: + jobname: sparse + runs-on: ubuntu-20.04 + concurrency: + group: sparse-${{ github.ref }} + cancel-in-progress: ${{ needs.ci-config.outputs.skip_concurrent == 'yes' }} + steps: + - name: Download a current `sparse` package + # Ubuntu's `sparse` version is too old for us + uses: git-for-windows/get-azure-pipelines-artifact@v0 + with: + repository: git/git + definitionId: 10 + artifact: sparse-20.04 + - name: Install the current `sparse` package + run: sudo dpkg -i sparse-20.04/sparse_*.deb + - uses: actions/checkout@v4 + - name: Install other dependencies + run: ci/install-dependencies.sh + - run: make sparse + documentation: + name: documentation + needs: ci-config + if: needs.ci-config.outputs.enabled == 'yes' + concurrency: + group: documentation-${{ github.ref }} + cancel-in-progress: ${{ needs.ci-config.outputs.skip_concurrent == 'yes' }} + env: + jobname: Documentation + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - run: ci/install-dependencies.sh + - run: ci/test-documentation.sh diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000..e82aa19df0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,252 @@ +/fuzz_corpora +/GIT-BUILD-DIR +/GIT-BUILD-OPTIONS +/GIT-CFLAGS +/GIT-LDFLAGS +/GIT-PREFIX +/GIT-PERL-DEFINES +/GIT-PERL-HEADER +/GIT-PYTHON-VARS +/GIT-SCRIPT-DEFINES +/GIT-SPATCH-DEFINES +/GIT-TEST-SUITES +/GIT-USER-AGENT +/GIT-VERSION-FILE +/git +/git-add +/git-am +/git-annotate +/git-apply +/git-archimport +/git-archive +/git-bisect +/git-blame +/git-branch +/git-bugreport +/git-bundle +/git-cat-file +/git-check-attr +/git-check-ignore +/git-check-mailmap +/git-check-ref-format +/git-checkout +/git-checkout--worker +/git-checkout-index +/git-cherry +/git-cherry-pick +/git-clean +/git-clone +/git-column +/git-commit +/git-commit-graph +/git-commit-tree +/git-config +/git-count-objects +/git-credential +/git-credential-cache +/git-credential-cache--daemon +/git-credential-store +/git-cvsexportcommit +/git-cvsimport +/git-cvsserver +/git-daemon +/git-diagnose +/git-diff +/git-diff-files +/git-diff-index +/git-diff-tree +/git-difftool +/git-difftool--helper +/git-describe +/git-fast-export +/git-fast-import +/git-fetch +/git-fetch-pack +/git-filter-branch +/git-fmt-merge-msg +/git-for-each-ref +/git-for-each-repo +/git-format-patch +/git-fsck +/git-fsck-objects +/git-fsmonitor--daemon +/git-gc +/git-get-tar-commit-id +/git-grep +/git-hash-object +/git-help +/git-hook +/git-http-backend +/git-http-fetch +/git-http-push +/git-imap-send +/git-index-pack +/git-init +/git-init-db +/git-interpret-trailers +/git-instaweb +/git-log +/git-ls-files +/git-ls-remote +/git-ls-tree +/git-mailinfo +/git-mailsplit +/git-maintenance +/git-merge +/git-merge-base +/git-merge-index +/git-merge-file +/git-merge-tree +/git-merge-octopus +/git-merge-one-file +/git-merge-ours +/git-merge-recursive +/git-merge-resolve +/git-merge-subtree +/git-mergetool +/git-mergetool--lib +/git-mktag +/git-mktree +/git-multi-pack-index +/git-mv +/git-name-rev +/git-notes +/git-p4 +/git-pack-redundant +/git-pack-objects +/git-pack-refs +/git-patch-id +/git-prune +/git-prune-packed +/git-pull +/git-push +/git-quiltimport +/git-range-diff +/git-read-tree +/git-rebase +/git-receive-pack +/git-reflog +/git-refs +/git-remote +/git-remote-http +/git-remote-https +/git-remote-ftp +/git-remote-ftps +/git-remote-fd +/git-remote-ext +/git-repack +/git-replace +/git-replay +/git-request-pull +/git-rerere +/git-reset +/git-restore +/git-rev-list +/git-rev-parse +/git-revert +/git-rm +/git-send-email +/git-send-pack +/git-sh-i18n +/git-sh-i18n--envsubst +/git-sh-setup +/git-shell +/git-shortlog +/git-show +/git-show-branch +/git-show-index +/git-show-ref +/git-sparse-checkout +/git-stage +/git-stash +/git-status +/git-stripspace +/git-submodule +/git-submodule--helper +/git-subtree +/git-svn +/git-switch +/git-symbolic-ref +/git-tag +/git-unpack-file +/git-unpack-objects +/git-update-index +/git-update-ref +/git-update-server-info +/git-upload-archive +/git-upload-pack +/git-var +/git-verify-commit +/git-verify-pack +/git-verify-tag +/git-version +/git-web--browse +/git-whatchanged +/git-worktree +/git-write-tree +/scalar +/git-core-*/?* +/git.res +/gitweb/GITWEB-BUILD-OPTIONS +/gitweb/gitweb.cgi +/gitweb/static/gitweb.js +/gitweb/static/gitweb.min.* +/config-list.h +/command-list.h +/hook-list.h +/version-def.h +*.tar.gz +*.dsc +*.deb +/git.rc +/git.spec +*.exe +*.[aos] +*.o.json +*.py[co] +.build/ +.depend/ +*.gcda +*.gcno +*.gcov +/coverage-untested-functions +/cover_db/ +/cover_db_html/ +*+ +/config.mak +/autom4te.cache +/config.cache +/config.log +/config.status +/config.mak.autogen +/config.mak.append +/configure +/.vscode/ +/tags +/TAGS +/cscope* +/compile_commands.json +/.cache/ +*.hcc +*.obj +*.lib +*.sln +*.sp +*.suo +*.ncb +*.vcproj +*.user +*.idb +*.pdb +*.ilk +*.iobj +*.ipdb +*.dll +.vs/ +Debug/ +Release/ +/UpgradeLog*.htm +/git.VC.VC.opendb +/git.VC.db +*.dSYM +/contrib/buildsystems/out diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000000..9254e01583 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,220 @@ +default: + timeout: 2h + +stages: + - build + - test + - analyze + +workflow: + rules: + - if: $CI_PIPELINE_SOURCE == "merge_request_event" + - if: $CI_COMMIT_TAG + - if: $CI_COMMIT_REF_PROTECTED == "true" + +test:linux: + image: $image + stage: test + needs: [ ] + tags: + - saas-linux-medium-amd64 + variables: + CUSTOM_PATH: "/custom" + TEST_OUTPUT_DIRECTORY: "/tmp/test-output" + before_script: + - ./ci/install-dependencies.sh + script: + - useradd builder --create-home + - chown -R builder "${CI_PROJECT_DIR}" + - sudo --preserve-env --set-home --user=builder ./ci/run-build-and-tests.sh + after_script: + - | + if test "$CI_JOB_STATUS" != 'success' + then + sudo --preserve-env --set-home --user=builder ./ci/print-test-failures.sh + mv "$TEST_OUTPUT_DIRECTORY"/failed-test-artifacts t/ + fi + parallel: + matrix: + - jobname: linux-old + image: ubuntu:20.04 + CC: gcc + - jobname: linux-sha256 + image: ubuntu:latest + CC: clang + - jobname: linux-reftable + image: ubuntu:latest + CC: clang + - jobname: linux-gcc + image: ubuntu:20.04 + CC: gcc + CC_PACKAGE: gcc-8 + - jobname: linux-TEST-vars + image: ubuntu:20.04 + CC: gcc + CC_PACKAGE: gcc-8 + - jobname: linux-gcc-default + image: ubuntu:latest + CC: gcc + - jobname: linux-leaks + image: ubuntu:latest + CC: gcc + - jobname: linux-reftable-leaks + image: ubuntu:latest + CC: gcc + - jobname: linux-asan-ubsan + image: ubuntu:latest + CC: clang + - jobname: pedantic + image: fedora:latest + - jobname: linux-musl + image: alpine:latest + - jobname: linux-meson + image: ubuntu:latest + CC: gcc + artifacts: + paths: + - t/failed-test-artifacts + when: on_failure + +test:osx: + image: $image + stage: test + needs: [ ] + tags: + - saas-macos-medium-m1 + variables: + TEST_OUTPUT_DIRECTORY: "/Volumes/RAMDisk" + before_script: + # Create a 4GB RAM disk that we use to store test output on. This small hack + # significantly speeds up tests by more than a factor of 2 because the + # macOS runners use network-attached storage as disks, which is _really_ + # slow with the many small writes that our tests do. + - sudo diskutil apfs create $(hdiutil attach -nomount ram://8192000) RAMDisk + - ./ci/install-dependencies.sh + script: + - ./ci/run-build-and-tests.sh + after_script: + - | + if test "$CI_JOB_STATUS" != 'success' + then + ./ci/print-test-failures.sh + mv "$TEST_OUTPUT_DIRECTORY"/failed-test-artifacts t/ + fi + parallel: + matrix: + - jobname: osx-clang + image: macos-14-xcode-15 + CC: clang + - jobname: osx-reftable + image: macos-14-xcode-15 + CC: clang + - jobname: osx-meson + image: macos-14-xcode-15 + CC: clang + artifacts: + paths: + - t/failed-test-artifacts + when: on_failure + +build:mingw64: + stage: build + tags: + - saas-windows-medium-amd64 + variables: + NO_PERL: 1 + before_script: + - ./ci/install-sdk.ps1 -directory "git-sdk" + script: + - git-sdk/usr/bin/bash.exe -l -c 'ci/make-test-artifacts.sh artifacts' + artifacts: + paths: + - artifacts + - git-sdk + +test:mingw64: + stage: test + tags: + - saas-windows-medium-amd64 + needs: + - job: "build:mingw64" + artifacts: true + before_script: + - git-sdk/usr/bin/bash.exe -l -c 'tar xf artifacts/artifacts.tar.gz' + - New-Item -Path .git/info -ItemType Directory + - New-Item .git/info/exclude -ItemType File -Value "/git-sdk" + script: + - git-sdk/usr/bin/bash.exe -l -c "ci/run-test-slice.sh $CI_NODE_INDEX $CI_NODE_TOTAL" + after_script: + - git-sdk/usr/bin/bash.exe -l -c 'ci/print-test-failures.sh' + parallel: 10 + +test:fuzz-smoke-tests: + image: ubuntu:latest + stage: test + needs: [ ] + variables: + CC: clang + before_script: + - ./ci/install-dependencies.sh + script: + - ./ci/run-build-and-minimal-fuzzers.sh + +static-analysis: + image: ubuntu:22.04 + stage: analyze + needs: [ ] + variables: + jobname: StaticAnalysis + before_script: + - ./ci/install-dependencies.sh + script: + - ./ci/run-static-analysis.sh + - ./ci/check-directional-formatting.bash + +check-whitespace: + image: ubuntu:latest + stage: analyze + needs: [ ] + before_script: + - ./ci/install-dependencies.sh + # Since $CI_MERGE_REQUEST_TARGET_BRANCH_SHA is only defined for merged + # pipelines, we fallback to $CI_MERGE_REQUEST_DIFF_BASE_SHA, which should + # be defined in all pipelines. + script: + - | + R=${CI_MERGE_REQUEST_TARGET_BRANCH_SHA-${CI_MERGE_REQUEST_DIFF_BASE_SHA:?}} || exit + ./ci/check-whitespace.sh "$R" + rules: + - if: $CI_PIPELINE_SOURCE == 'merge_request_event' + +check-style: + image: ubuntu:latest + stage: analyze + needs: [ ] + allow_failure: true + variables: + CC: clang + jobname: ClangFormat + before_script: + - ./ci/install-dependencies.sh + # Since $CI_MERGE_REQUEST_TARGET_BRANCH_SHA is only defined for merged + # pipelines, we fallback to $CI_MERGE_REQUEST_DIFF_BASE_SHA, which should + # be defined in all pipelines. + script: + - | + R=${CI_MERGE_REQUEST_TARGET_BRANCH_SHA-${CI_MERGE_REQUEST_DIFF_BASE_SHA:?}} || exit + ./ci/run-style-check.sh "$R" + rules: + - if: $CI_PIPELINE_SOURCE == 'merge_request_event' + +documentation: + image: ubuntu:latest + stage: analyze + needs: [ ] + variables: + jobname: Documentation + before_script: + - ./ci/install-dependencies.sh + script: + - ./ci/test-documentation.sh diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000000..cbeebdab7a --- /dev/null +++ b/.gitmodules @@ -0,0 +1,4 @@ +[submodule "sha1collisiondetection"] + path = sha1collisiondetection + url = https://github.com/cr-marcstevens/sha1collisiondetection.git + branch = master diff --git a/.mailmap b/.mailmap new file mode 100644 index 0000000000..96c2740fbb --- /dev/null +++ b/.mailmap @@ -0,0 +1,304 @@ +# +# This list is used by git-shortlog to fix a few botched name translations +# in the git archive, either because the author's full name was messed up +# and/or not always written the same way, making contributions from the +# same person appearing not to be so. +# + + +Alejandro R. Sedeño +Alex Bennée +Alex Riesen +Alex Riesen +Alex Riesen +Alex Vandiver +Alexander Gavrilov +Alexander Kuleshov +Alexey Shumkin +Alexey Shumkin +Anders Kaseorg +Anders Kaseorg +Andrey Mazo Mazo, Andrey +Aneesh Kumar K.V +Amos Waterland +Amos Waterland +Ben Peart +Ben Peart +Ben Walton +Benoit Sigoure +Bernt Hansen +Brandon Casey +Brandon Williams +brian m. carlson +brian m. carlson +brian m. carlson +Bryan Larsen +Bryan Larsen +Cheng Renquan +Chris Shoemaker +Chris Wright +Christian Ludwig +Cord Seele +Christian Couder +Christian Stimming +Christopher Díaz Riveros Christopher Diaz Riveros +Clemens Buchacher +Clemens Buchacher +Csaba Henk +Dan Johnson +Dana L. How +Dana L. How Dana How +Daniel Barkalow +Daniel Knittl-Frank knittl +Daniel Trstenjak +Daniel Trstenjak +David Brown +David D. Kilzer +David Kågedal +David Reiss +David S. Miller +David Turner +David Turner +Derrick Stolee +Derrick Stolee Derrick Stolee via GitGitGadget +Derrick Stolee +Deskin Miller +Đoàn Trần Công Danh Doan Tran Cong Danh +Dirk Süsserott +Emily Shaffer +Eric Blake +Eric Hanchrow +Eric S. Raymond +Eric Wong +Erik Faye-Lund +Eyvind Bernhardsen +Fangyi Zhou Zhou Fangyi +Florian Achleitner +Franck Bui-Huu +Frank Lichtenheld +Frank Lichtenheld +Fredrik Kuivinen +Frédéric Heitzmann +Garry Dolley +Glen Choo +Greg Price +Greg Price +Heiko Voigt +H. Merijn Brand H.Merijn Brand +H. Peter Anvin +H. Peter Anvin +H. Peter Anvin +H. Peter Anvin +Han-Wen Nienhuys Han-Wen Nienhuys +Horst H. von Brand +J. Bruce Fields +J. Bruce Fields +J. Bruce Fields +Jakub Narębski +James Y Knight +# The 2 following authors are probably the same person, +# but both emails bounce. +Jason McMullan +Jason McMullan +Jason Riedy +Jason Riedy +Jay Soffian +Jean-Noël Avila Jean-Noel Avila +Jean-Noël Avila Jean-Noël AVILA +Jeff King +Jeff Muizelaar +Jens Axboe +Jens Axboe +Jens Lindström Jens Lindstrom +Jim Meyering +Joachim Berdal Haga +Joachim Jablon +Johannes Schindelin +Johannes Schindelin Johannes Schindelin via GitGitGadget +Johannes Sixt +Johannes Sixt +Johannes Sixt +John 'Warthog9' Hawley +Jon Loeliger +Jon Loeliger +Jon Seymour +Jonathan Nieder +Jonathan del Strother +Josh Triplett +Josh Triplett +Julian Phillips +Junio C Hamano +Junio C Hamano +Junio C Hamano +Junio C Hamano +Junio C Hamano +Junio C Hamano +Junio C Hamano +Kaartic Sivaraam +Karl Wiberg Karl Hasselström +Karl Wiberg +Karsten Blees +Karsten Blees +Kay Sievers +Kay Sievers +Kazuki Saitoh kazuki saitoh +Keith Cascio +Kent Engstrom +Kevin Leung +Kirill Smelkov +Kirill Smelkov +Knut Franke +Lars Doelle +Lars Doelle +Lars Noschinski +Li Hong +Linus Arver +Linus Torvalds +Linus Torvalds +Linus Torvalds +Linus Torvalds +Linus Torvalds +Linus Torvalds +Lukas Sandström +Marc Khouzam +Marc-André Lureau +Marco Costalba +Mark Levedahl +Mark Rada +Martin Langhoff +Martin von Zweigbergk +Masaya Suzuki +Matheus Tavares +Matt Draisey +Matt Kraai +Matt McCutchen +Matthias Kestenholz +Matthias Rüster Matthias Ruester +Matthias Urlichs +Matthias Urlichs +Matthieu Moy +Michael Coleman +Michael J Gruber +Michael J Gruber +Michael S. Tsirkin +Michael S. Tsirkin +Michael S. Tsirkin +Michael W. Olson +Michael Witten +Michael Witten +Michal Rokos +Michele Ballabio +Miklos Vajna +Namhyung Kim +Namhyung Kim +Nanako Shiraishi +Nanako Shiraishi +Nelson Elhage +Nelson Elhage +Nguyễn Thái Ngọc Duy +Nick Stokoe Nick Woolley +Nick Stokoe Nick Woolley +Nicolas Morey-Chaisemartin +Nicolas Morey-Chaisemartin +Nicolas Morey-Chaisemartin +Nicolas Morey-Chaisemartin +Nicolas Morey-Chaisemartin +Nicolas Sebrecht +Orgad Shaneh +Paolo Bonzini +Pascal Obry +Pascal Obry +Pat Notz +Patrick Steinhardt +Paul Mackerras +Paul Mackerras +Peter Baumann +Peter Baumann +Peter Krefting +Peter Krefting +Petr Baudis +Petr Baudis +Phil Hord +Philip Jägenstedt +Philip Oakley # secondary +Philipp A. Hartmann +Philippe Bruhat +Ralf Thielow +Ramsay Jones +Ramkumar Ramachandra +Randall S. Becker +René Scharfe +René Scharfe Rene Scharfe +Richard Hansen +Richard Hansen +Robert Fitzsimons +Robert Shearman +Robert Zeh +Robin Rosenberg +Rutger Nijlunsing +Rutger Nijlunsing +Ryan Anderson +Salikh Zakirov +Sam Vilain +Sam Vilain sam@vilain.net +Santi Béjar +Sean Estabrooks +Sebastian Schuberth +Seth Falcon +Shawn O. Pearce +Wei Shuyu Shuyu Wei +Sidhant Sharma Sidhant Sharma [:tk] +Simon Hausmann +Simon Hausmann +Stefan Beller +Stefan Beller +Stefan Naewe +Stefan Naewe +Stefan Sperling +Štěpán Němec +Stephen Boyd +Stephen P. Smith +Steven Drake +Steven Grimm +Steven Grimm koreth@midwinter.com +Steven Walter +Steven Walter +Sven Verdoolaege +Sven Verdoolaege +SZEDER Gábor +Tao Qingyun <845767657@qq.com> +Tay Ray Chuan +Ted Percival +Theodore Ts'o +Thomas Ackermann +Thomas Rast +Thomas Rast +Thomas Rast +Timo Hirvonen +Toby Allsopp +Tom Grennan +Tommi Virtanen +Tommi Virtanen +Tommy Thorn +Tony Luck +Tor Arne Vestbø +Trần Ngọc Quân Tran Ngoc Quan +Trent Piepho +Trent Piepho +Uwe Kleine-König +Uwe Kleine-König +Uwe Kleine-König +Uwe Kleine-König +Ville Skyttä +Vitaly "_Vi" Shukela +Vitaly "_Vi" Shukela Vitaly _Vi Shukela +W. Trevor King +William Pursell +YONETANI Tomokazu +YONETANI Tomokazu +YOSHIFUJI Hideaki +Yi-Jyun Pan +# the two anonymous contributors are different persons: +anonymous +anonymous +İsmail Dönmez diff --git a/.tsan-suppressions b/.tsan-suppressions new file mode 100644 index 0000000000..5ba86d6845 --- /dev/null +++ b/.tsan-suppressions @@ -0,0 +1,16 @@ +# Suppressions for ThreadSanitizer (tsan). +# +# This file is used by setting the environment variable TSAN_OPTIONS to, e.g., +# "suppressions=$(pwd)/.tsan-suppressions". Observe that relative paths such as +# ".tsan-suppressions" might not work. + +# A static variable is written to racily, but we always write the same value, so +# in practice it (hopefully!) doesn't matter. +race:^want_color$ +race:^transfer_debug$ + +# A boolean value, which tells whether the replace_map has been initialized or +# not, is read racily with an update. As this variable is written to only once, +# and it's OK if the value change right after reading it, this shouldn't be a +# problem. +race:^lookup_replace_object$ diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000000..e58917c50a --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,145 @@ +# Git Code of Conduct + +This code of conduct outlines our expectations for participants within +the Git community, as well as steps for reporting unacceptable behavior. +We are committed to providing a welcoming and inspiring community for +all and expect our code of conduct to be honored. Anyone who violates +this code of conduct may be banned from the community. + +## Our Pledge + +We as members, contributors, and leaders pledge to make participation in our +community a harassment-free experience for everyone, regardless of age, body +size, visible or invisible disability, ethnicity, sex characteristics, gender +identity and expression, level of experience, education, socio-economic status, +nationality, personal appearance, race, religion, or sexual identity +and orientation. + +We pledge to act and interact in ways that contribute to an open, welcoming, +diverse, inclusive, and healthy community. + +## Our Standards + +Examples of behavior that contributes to a positive environment for our +community include: + +* Demonstrating empathy and kindness toward other people +* Being respectful of differing opinions, viewpoints, and experiences +* Giving and gracefully accepting constructive feedback +* Accepting responsibility and apologizing to those affected by our mistakes, + and learning from the experience +* Focusing on what is best not just for us as individuals, but for the + overall community + +Examples of unacceptable behavior include: + +* The use of sexualized language or imagery, and sexual attention or + advances of any kind +* Trolling, insulting or derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or email + address, without their explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Enforcement Responsibilities + +Community leaders are responsible for clarifying and enforcing our standards of +acceptable behavior and will take appropriate and fair corrective action in +response to any behavior that they deem inappropriate, threatening, offensive, +or harmful. + +Community leaders have the right and responsibility to remove, edit, or reject +comments, commits, code, wiki edits, issues, and other contributions that are +not aligned to this Code of Conduct, and will communicate reasons for moderation +decisions when appropriate. + +## Scope + +This Code of Conduct applies within all community spaces, and also applies when +an individual is officially representing the community in public spaces. +Examples of representing our community include using an official e-mail address, +posting via an official social media account, or acting as an appointed +representative at an online or offline event. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported to the community leaders responsible for enforcement at +git@sfconservancy.org, or individually: + + - Ævar Arnfjörð Bjarmason + - Christian Couder + - Junio C Hamano + - Taylor Blau + +All complaints will be reviewed and investigated promptly and fairly. + +All community leaders are obligated to respect the privacy and security of the +reporter of any incident. + +## Enforcement Guidelines + +Community leaders will follow these Community Impact Guidelines in determining +the consequences for any action they deem in violation of this Code of Conduct: + +### 1. Correction + +**Community Impact**: Use of inappropriate language or other behavior deemed +unprofessional or unwelcome in the community. + +**Consequence**: A private, written warning from community leaders, providing +clarity around the nature of the violation and an explanation of why the +behavior was inappropriate. A public apology may be requested. + +### 2. Warning + +**Community Impact**: A violation through a single incident or series +of actions. + +**Consequence**: A warning with consequences for continued behavior. No +interaction with the people involved, including unsolicited interaction with +those enforcing the Code of Conduct, for a specified period of time. This +includes avoiding interactions in community spaces as well as external channels +like social media. Violating these terms may lead to a temporary or +permanent ban. + +### 3. Temporary Ban + +**Community Impact**: A serious violation of community standards, including +sustained inappropriate behavior. + +**Consequence**: A temporary ban from any sort of interaction or public +communication with the community for a specified period of time. No public or +private interaction with the people involved, including unsolicited interaction +with those enforcing the Code of Conduct, is allowed during this period. +Violating these terms may lead to a permanent ban. + +### 4. Permanent Ban + +**Community Impact**: Demonstrating a pattern of violation of community +standards, including sustained inappropriate behavior, harassment of an +individual, or aggression toward or disparagement of classes of individuals. + +**Consequence**: A permanent ban from any sort of public interaction within +the community. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], +version 2.0, available at +[https://www.contributor-covenant.org/version/2/0/code_of_conduct.html][v2.0]. + +Community Impact Guidelines were inspired by +[Mozilla's code of conduct enforcement ladder][Mozilla CoC]. + +For answers to common questions about this code of conduct, see the FAQ at +[https://www.contributor-covenant.org/faq][FAQ]. Translations are available +at [https://www.contributor-covenant.org/translations][translations]. + +[homepage]: https://www.contributor-covenant.org +[v2.0]: https://www.contributor-covenant.org/version/2/0/code_of_conduct.html +[Mozilla CoC]: https://github.com/mozilla/diversity +[FAQ]: https://www.contributor-covenant.org/faq +[translations]: https://www.contributor-covenant.org/translations + diff --git a/COPYING b/COPYING new file mode 100644 index 0000000000..536e55524d --- /dev/null +++ b/COPYING @@ -0,0 +1,360 @@ + + Note that the only valid version of the GPL as far as this project + is concerned is _this_ particular version of the license (ie v2, not + v2.2 or v3.x or whatever), unless explicitly otherwise stated. + + HOWEVER, in order to allow a migration to GPLv3 if that seems like + a good idea, I also ask that people involved with the project make + their preferences known. In particular, if you trust me to make that + decision, you might note so in your copyright message, ie something + like + + This file is licensed under the GPL v2, or a later version + at the discretion of Linus. + + might avoid issues. But we can also just decide to synchronize and + contact all copyright holders on record if/when the occasion arises. + + Linus Torvalds + +---------------------------------------- + + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/Documentation/.gitattributes b/Documentation/.gitattributes new file mode 100644 index 0000000000..ddb030137d --- /dev/null +++ b/Documentation/.gitattributes @@ -0,0 +1 @@ +*.txt whitespace diff --git a/Documentation/.gitignore b/Documentation/.gitignore new file mode 100644 index 0000000000..9f4bb3c4bf --- /dev/null +++ b/Documentation/.gitignore @@ -0,0 +1,20 @@ +*.xml +*.html +*.[1-8] +*.made +*.texi +*.pdf +git.info +gitman.info +howto-index.txt +doc.dep +cmds-*.txt +mergetools-*.txt +SubmittingPatches.txt +tmp-doc-diff/ +tmp-meson-diff/ +GIT-ASCIIDOCFLAGS +/.build/ +/GIT-EXCLUDED-PROGRAMS +/asciidoc.conf +/asciidoctor-extensions.rb diff --git a/Documentation/BreakingChanges.adoc b/Documentation/BreakingChanges.adoc new file mode 100644 index 0000000000..27acff86db --- /dev/null +++ b/Documentation/BreakingChanges.adoc @@ -0,0 +1,174 @@ += Upcoming breaking changes + +The Git project aims to ensure backwards compatibility to the best extent +possible. Minor releases will not break backwards compatibility unless there is +a very strong reason to do so, like for example a security vulnerability. + +Regardless of that, due to the age of the Git project, it is only natural to +accumulate a backlog of backwards-incompatible changes that will eventually be +required to keep the project aligned with a changing world. These changes fall +into several categories: + +* Changes to long established defaults. +* Concepts that have been replaced with a superior design. +* Concepts, commands, configuration or options that have been lacking in major + ways and that cannot be fixed and which will thus be removed without any + replacement. + +Explicitly not included in this list are fixes to minor bugs that may cause a +change in user-visible behavior. + +The Git project irregularly releases breaking versions that deliberately break +backwards compatibility with older versions. This is done to ensure that Git +remains relevant, safe and maintainable going forward. The release cadence of +breaking versions is typically measured in multiple years. We had the following +major breaking releases in the past: + +* Git 1.6.0, released in August 2008. +* Git 2.0, released in May 2014. + +We use . release numbers these days, starting from Git 2.0. For +future releases, our plan is to increment in the release number when we +make the next breaking release. Before Git 2.0, the release numbers were +1.. with the intention to increment for "usual" breaking +releases, reserving the jump to Git 2.0 for really large backward-compatibility +breaking changes. + +The intent of this document is to track upcoming deprecations for future +breaking releases. Furthermore, this document also tracks what will _not_ be +deprecated. This is done such that the outcome of discussions document both +when the discussion favors deprecation, but also when it rejects a deprecation. + +Items should have a clear summary of the reasons why we do or do not want to +make the described change that can be easily understood without having to read +the mailing list discussions. If there are alternatives to the changed feature, +those alternatives should be pointed out to our users. + +All items should be accompanied by references to relevant mailing list threads +where the deprecation was discussed. These references use message-IDs, which +can visited via + + https://lore.kernel.org/git/$message_id/ + +to see the message and its surrounding discussion. Such a reference is there to +make it easier for you to find how the project reached consensus on the +described item back then. + +This is a living document as the environment surrounding the project changes +over time. If circumstances change, an earlier decision to deprecate or change +something may need to be revisited from time to time. So do not take items on +this list to mean "it is settled, do not waste our time bringing it up again". + +== Procedure + +Discussing the desire to make breaking changes, declaring that breaking +changes are made at a certain version boundary, and recording these +decisions in this document, are necessary but not sufficient. +Because such changes are expected to be numerous, and the design and +implementation of them are expected to span over time, they have to +be deployable trivially at such a version boundary. + +The breaking changes MUST be guarded with the a compile-time switch, +WITH_BREAKING_CHANGES, to help this process. When built with it, +the resulting Git binary together with its documentation would +behave as if these breaking changes slated for the next big version +boundary are already in effect. We may also want to have a CI job +or two to exercise the work-in-progress version of Git with these +breaking changes. + + +== Git 3.0 + +The following subsections document upcoming breaking changes for Git 3.0. There +is no planned release date for this breaking version yet. The early +adopter configuration used for changes for this release is `feature.git3`. + +Proposed changes and removals only include items which are "ready" to be done. +In other words, this is not supposed to be a wishlist of features that should +be changed to or replaced in case the alternative was implemented already. + +=== Changes + +* The default hash function for new repositories will be changed from "sha1" + to "sha256". SHA-1 has been deprecated by NIST in 2011 and is nowadays + recommended against in FIPS 140-2 and similar certifications. Furthermore, + there are practical attacks on SHA-1 that weaken its cryptographic properties: ++ + ** The SHAppening (2015). The first demonstration of a practical attack + against SHA-1 with 2^57 operations. + ** SHAttered (2017). Generation of two valid PDF files with 2^63 operations. + ** Birthday-Near-Collision (2019). This attack allows for chosen prefix + attacks with 2^68 operations. + ** Shambles (2020). This attack allows for chosen prefix attacks with 2^63 + operations. ++ +While we have protections in place against known attacks, it is expected +that more attacks against SHA-1 will be found by future research. Paired +with the ever-growing capability of hardware, it is only a matter of time +before SHA-1 will be considered broken completely. We want to be prepared +and will thus change the default hash algorithm to "sha256" for newly +initialized repositories. ++ +An important requirement for this change is that the ecosystem is ready to +support the "sha256" object format. This includes popular Git libraries, +applications and forges. ++ +There is no plan to deprecate the "sha1" object format at this point in time. ++ +Cf. <2f5de416-04ba-c23d-1e0b-83bb655829a7@zombino.com>, +<20170223155046.e7nxivfwqqoprsqj@LykOS.localdomain>, +. + +=== Removals + +* Support for grafting commits has long been superseded by git-replace(1). + Grafts are inferior to replacement refs: ++ + ** Grafts are a local-only mechanism and cannot be shared across + repositories. + ** Grafts can lead to hard-to-diagnose problems when transferring objects + between repositories. ++ +The grafting mechanism has been marked as outdated since e650d0643b (docs: mark +info/grafts as outdated, 2014-03-05) and will be removed. ++ +Cf. <20140304174806.GA11561@sigill.intra.peff.net>. + +* The git-pack-redundant(1) command can be used to remove redundant pack files. + The subcommand is unusably slow and the reason why nobody reports it as a + performance bug is suspected to be the absence of users. We have nominated + the command for removal and have started to emit a user-visible warning in + c3b58472be (pack-redundant: gauge the usage before proposing its removal, + 2020-08-25) whenever the command is executed. ++ +So far there was a single complaint about somebody still using the command, but +that complaint did not cause us to reverse course. On the contrary, we have +doubled down on the deprecation and starting with 4406522b76 (pack-redundant: +escalate deprecation warning to an error, 2023-03-23), the command dies unless +the user passes the `--i-still-use-this` option. ++ +There have not been any subsequent complaints, so this command will finally be +removed. ++ +Cf. , + , + <20230323204047.GA9290@coredump.intra.peff.net>, + +== Superseded features that will not be deprecated + +Some features have gained newer replacements that aim to improve the design in +certain ways. The fact that there is a replacement does not automatically mean +that the old way of doing things will eventually be removed. This section tracks +those features with newer alternatives. + +* The features git-checkout(1) offers are covered by the pair of commands + git-restore(1) and git-switch(1). Because the use of git-checkout(1) is still + widespread, and it is not expected that this will change anytime soon, all + three commands will stay. ++ +This decision may get revisited in case we ever figure out that there are +almost no users of any of the commands anymore. ++ +Cf. , +, +<112b6568912a6de6672bf5592c3a718e@manjaro.org>. diff --git a/Documentation/CodingGuidelines b/Documentation/CodingGuidelines new file mode 100644 index 0000000000..ba047ed224 --- /dev/null +++ b/Documentation/CodingGuidelines @@ -0,0 +1,947 @@ +Like other projects, we also have some guidelines for our code. For +Git in general, a few rough rules are: + + - Most importantly, we never say "It's in POSIX; we'll happily + ignore your needs should your system not conform to it." + We live in the real world. + + - However, we often say "Let's stay away from that construct, + it's not even in POSIX". + + - In spite of the above two rules, we sometimes say "Although + this is not in POSIX, it (is so convenient | makes the code + much more readable | has other good characteristics) and + practically all the platforms we care about support it, so + let's use it". + + Again, we live in the real world, and it is sometimes a + judgement call, the decision based more on real world + constraints people face than what the paper standard says. + + - Fixing style violations while working on a real change as a + preparatory clean-up step is good, but otherwise avoid useless code + churn for the sake of conforming to the style. + + "Once it _is_ in the tree, it's not really worth the patch noise to + go and fix it up." + Cf. https://lore.kernel.org/all/20100126160632.3bdbe172.akpm@linux-foundation.org/ + + - Log messages to explain your changes are as important as the + changes themselves. Clearly written code and in-code comments + explain how the code works and what is assumed from the surrounding + context. The log messages explain what the changes wanted to + achieve and why the changes were necessary (more on this in the + accompanying SubmittingPatches document). + +Make your code readable and sensible, and don't try to be clever. + +As for more concrete guidelines, just imitate the existing code +(this is a good guideline, no matter which project you are +contributing to). It is always preferable to match the _local_ +convention. New code added to Git suite is expected to match +the overall style of existing code. Modifications to existing +code are expected to match the style the surrounding code already +uses (even if it doesn't match the overall style of existing code). + +But if you must have a list of rules, here are some language +specific ones. Note that Documentation/ToolsForGit.txt document +has a collection of tips to help you use some external tools +to conform to these guidelines. + +For shell scripts specifically (not exhaustive): + + - We use tabs for indentation. + + - Case arms are indented at the same depth as case and esac lines, + like this: + + case "$variable" in + pattern1) + do this + ;; + pattern2) + do that + ;; + esac + + - Redirection operators should be written with space before, but no + space after them. In other words, write 'echo test >"$file"' + instead of 'echo test> $file' or 'echo test > $file'. Note that + even though it is not required by POSIX to double-quote the + redirection target in a variable (as shown above), our code does so + because some versions of bash issue a warning without the quotes. + + (incorrect) + cat hello > world < universe + echo hello >$world + + (correct) + cat hello >world "$world" + + - We prefer $( ... ) for command substitution; unlike ``, it + properly nests. It should have been the way Bourne spelled + it from day one, but unfortunately isn't. + + - If you want to find out if a command is available on the user's + $PATH, you should use 'type ', instead of 'which '. + The output of 'which' is not machine parsable and its exit code + is not reliable across platforms. + + - We use POSIX compliant parameter substitutions and avoid bashisms; + namely: + + - We use ${parameter-word} and its [-=?+] siblings, and their + colon'ed "unset or null" form. + + - We use ${parameter#word} and its [#%] siblings, and their + doubled "longest matching" form. + + - No "Substring Expansion" ${parameter:offset:length}. + + - No shell arrays. + + - No pattern replacement ${parameter/pattern/string}. + + - We use Arithmetic Expansion $(( ... )). + + - We do not use Process Substitution <(list) or >(list). + + - Do not write control structures on a single line with semicolon. + "then" should be on the next line for if statements, and "do" + should be on the next line for "while" and "for". + + (incorrect) + if test -f hello; then + do this + fi + + (correct) + if test -f hello + then + do this + fi + + - If a command sequence joined with && or || or | spans multiple + lines, put each command on a separate line and put && and || and | + operators at the end of each line, rather than the start. This + means you don't need to use \ to join lines, since the above + operators imply the sequence isn't finished. + + (incorrect) + grep blob verify_pack_result \ + | awk -f print_1.awk \ + | sort >actual && + ... + + (correct) + grep blob verify_pack_result | + awk -f print_1.awk | + sort >actual && + ... + + - We prefer "test" over "[ ... ]". + + - We do not write the noiseword "function" in front of shell + functions. + + - We prefer a space between the function name and the parentheses, + and no space inside the parentheses. The opening "{" should also + be on the same line. + + (incorrect) + my_function(){ + ... + + (correct) + my_function () { + ... + + - As to use of grep, stick to a subset of BRE (namely, no \{m,n\}, + [::], [==], or [..]) for portability. + + - We do not use \{m,n\}; + + - We do not use ? or + (which are \{0,1\} and \{1,\} + respectively in BRE) but that goes without saying as these + are ERE elements not BRE (note that \? and \+ are not even part + of BRE -- making them accessible from BRE is a GNU extension). + + - Use Git's gettext wrappers in git-sh-i18n to make the user + interface translatable. See "Marking strings for translation" in + po/README. + + - We do not write our "test" command with "-a" and "-o" and use "&&" + or "||" to concatenate multiple "test" commands instead, because + the use of "-a/-o" is often error-prone. E.g. + + test -n "$x" -a "$a" = "$b" + + is buggy and breaks when $x is "=", but + + test -n "$x" && test "$a" = "$b" + + does not have such a problem. + + - Even though "local" is not part of POSIX, we make heavy use of it + in our test suite. We do not use it in scripted Porcelains, and + hopefully nobody starts using "local" before all shells that matter + support it (notably, ksh from AT&T Research does not support it yet). + + - Some versions of shell do not understand "export variable=value", + so we write "variable=value" and then "export variable" on two + separate lines. + + - Some versions of dash have broken variable assignment when prefixed + with "local", "export", and "readonly", in that the value to be + assigned goes through field splitting at $IFS unless quoted. + + (incorrect) + local variable=$value + local variable=$(command args) + + (correct) + local variable="$value" + local variable="$(command args)" + + - The common construct + + VAR=VAL command args + + to temporarily set and export environment variable VAR only while + "command args" is running is handy, but this triggers an + unspecified behaviour according to POSIX when used for a command + that is not an external command (like shell functions). Indeed, + dash 0.5.10.2-6 on Ubuntu 20.04, /bin/sh on FreeBSD 13, and AT&T + ksh all make a temporary assignment without exporting the variable, + in such a case. As it does not work portably across shells, do not + use this syntax for shell functions. A common workaround is to do + an explicit export in a subshell, like so: + + (incorrect) + VAR=VAL func args + + (correct) + ( + VAR=VAL && + export VAR && + func args + ) + + but be careful that the effect "func" makes to the variables in the + current shell will be lost across the subshell boundary. + + - Use octal escape sequences (e.g. "\302\242"), not hexadecimal (e.g. + "\xc2\xa2") in printf format strings, since hexadecimal escape + sequences are not portable. + + +For C programs: + + - We use tabs to indent, and interpret tabs as taking up to + 8 spaces. + + - Nested C preprocessor directives are indented after the hash by one + space per nesting level. + + #if FOO + # include + # if BAR + # include + # endif + #endif + + - We try to keep to at most 80 characters per line. + + - As a Git developer we assume you have a reasonably modern compiler + and we recommend you to enable the DEVELOPER makefile knob to + ensure your patch is clear of all compiler warnings we care about, + by e.g. "echo DEVELOPER=1 >>config.mak". + + - When using DEVELOPER=1 mode, you may see warnings from the compiler + like "error: unused parameter 'foo' [-Werror=unused-parameter]", + which indicates that a function ignores its argument. If the unused + parameter can't be removed (e.g., because the function is used as a + callback and has to match a certain interface), you can annotate + the individual parameters with the UNUSED (or MAYBE_UNUSED) + keyword, like "int foo UNUSED". + + - We try to support a wide range of C compilers to compile Git with, + including old ones. As of Git v2.35.0 Git requires C99 (we check + "__STDC_VERSION__"). You should not use features from a newer C + standard, even if your compiler groks them. + + New C99 features have been phased in gradually, if something's new + in C99 but not used yet don't assume that it's safe to use, some + compilers we target have only partial support for it. These are + considered safe to use: + + . since around 2007 with 2b6854c863a, we have been using + initializer elements which are not computable at load time. E.g.: + + const char *args[] = { "constant", variable, NULL }; + + . since early 2012 with e1327023ea, we have been using an enum + definition whose last element is followed by a comma. This, like + an array initializer that ends with a trailing comma, can be used + to reduce the patch noise when adding a new identifier at the end. + + . since mid 2017 with cbc0f81d, we have been using designated + initializers for struct (e.g. "struct t v = { .val = 'a' };"). + + . since mid 2017 with 512f41cf, we have been using designated + initializers for array (e.g. "int array[10] = { [5] = 2 }"). + + . since early 2021 with 765dc168882, we have been using variadic + macros, mostly for printf-like trace and debug macros. + + . since late 2021 with 44ba10d6, we have had variables declared in + the for loop "for (int i = 0; i < 10; i++)". + + New C99 features that we cannot use yet: + + . %z and %zu as a printf() argument for a size_t (the %z being for + the POSIX-specific ssize_t). Instead you should use + printf("%"PRIuMAX, (uintmax_t)v). These days the MSVC version we + rely on supports %z, but the C library used by MinGW does not. + + . Shorthand like ".a.b = *c" in struct initializations is known to + trip up an older IBM XLC version, use ".a = { .b = *c }" instead. + See the 33665d98 (reftable: make assignments portable to AIX xlc + v12.01, 2022-03-28). + + - Variables have to be declared at the beginning of the block, before + the first statement (i.e. -Wdeclaration-after-statement). It is + encouraged to have a blank line between the end of the declarations + and the first statement in the block. + + - NULL pointers shall be written as NULL, not as 0. + + - When declaring pointers, the star sides with the variable + name, i.e. "char *string", not "char* string" or + "char * string". This makes it easier to understand code + like "char *string, c;". + + - Use whitespace around operators and keywords, but not inside + parentheses and not around functions. So: + + while (condition) + func(bar + 1); + + and not: + + while( condition ) + func (bar+1); + + - A binary operator (other than ",") and ternary conditional "?:" + have a space on each side of the operator to separate it from its + operands. E.g. "A + 1", not "A+1". + + - A unary operator (other than "." and "->") have no space between it + and its operand. E.g. "(char *)ptr", not "(char *) ptr". + + - Do not explicitly compare an integral value with constant 0 or '\0', + or a pointer value with constant NULL. For instance, to validate that + counted array is initialized but has no elements, write: + + if (!ptr || cnt) + BUG("empty array expected"); + + and not: + + if (ptr == NULL || cnt != 0); + BUG("empty array expected"); + + - We avoid using braces unnecessarily. I.e. + + if (bla) { + x = 1; + } + + is frowned upon. But there are a few exceptions: + + - When the statement extends over a few lines (e.g., a while loop + with an embedded conditional, or a comment). E.g.: + + while (foo) { + if (x) + one(); + else + two(); + } + + if (foo) { + /* + * This one requires some explanation, + * so we're better off with braces to make + * it obvious that the indentation is correct. + */ + doit(); + } + + - When there are multiple arms to a conditional and some of them + require braces, enclose even a single line block in braces for + consistency. E.g.: + + if (foo) { + doit(); + } else { + one(); + two(); + three(); + } + + - We try to avoid assignments in the condition of an "if" statement. + + - Try to make your code understandable. You may put comments + in, but comments invariably tend to stale out when the code + they were describing changes. Often splitting a function + into two makes the intention of the code much clearer. + + - Multi-line comments include their delimiters on separate lines from + the text. E.g. + + /* + * A very long + * multi-line comment. + */ + + Note however that a comment that explains a translatable string to + translators uses a convention of starting with a magic token + "TRANSLATORS: ", e.g. + + /* + * TRANSLATORS: here is a comment that explains the string to + * be translated, that follows immediately after it. + */ + _("Here is a translatable string explained by the above."); + + - Double negation is often harder to understand than no negation + at all. + + - There are two schools of thought when it comes to comparison, + especially inside a loop. Some people prefer to have the less stable + value on the left hand side and the more stable value on the right hand + side, e.g. if you have a loop that counts variable i down to the + lower bound, + + while (i > lower_bound) { + do something; + i--; + } + + Other people prefer to have the textual order of values match the + actual order of values in their comparison, so that they can + mentally draw a number line from left to right and place these + values in order, i.e. + + while (lower_bound < i) { + do something; + i--; + } + + Both are valid, and we use both. However, the more "stable" the + stable side becomes, the more we tend to prefer the former + (comparison with a constant, "i > 0", is an extreme example). + Just do not mix styles in the same part of the code and mimic + existing styles in the neighbourhood. + + - There are two schools of thought when it comes to splitting a long + logical line into multiple lines. Some people push the second and + subsequent lines far enough to the right with tabs and align them: + + if (the_beginning_of_a_very_long_expression_that_has_to || + span_more_than_a_single_line_of || + the_source_text) { + ... + + while other people prefer to align the second and the subsequent + lines with the column immediately inside the opening parenthesis, + with tabs and spaces, following our "tabstop is always a multiple + of 8" convention: + + if (the_beginning_of_a_very_long_expression_that_has_to || + span_more_than_a_single_line_of || + the_source_text) { + ... + + Both are valid, and we use both. Again, just do not mix styles in + the same part of the code and mimic existing styles in the + neighbourhood. + + - When splitting a long logical line, some people change line before + a binary operator, so that the result looks like a parse tree when + you turn your head 90-degrees counterclockwise: + + if (the_beginning_of_a_very_long_expression_that_has_to + || span_more_than_a_single_line_of_the_source_text) { + + while other people prefer to leave the operator at the end of the + line: + + if (the_beginning_of_a_very_long_expression_that_has_to || + span_more_than_a_single_line_of_the_source_text) { + + Both are valid, but we tend to use the latter more, unless the + expression gets fairly complex, in which case the former tends to + be easier to read. Again, just do not mix styles in the same part + of the code and mimic existing styles in the neighbourhood. + + - When splitting a long logical line, with everything else being + equal, it is preferable to split after the operator at higher + level in the parse tree. That is, this is more preferable: + + if (a_very_long_variable * that_is_used_in + + a_very_long_expression) { + ... + + than + + if (a_very_long_variable * + that_is_used_in + a_very_long_expression) { + ... + + - Some clever tricks, like using the !! operator with arithmetic + constructs, can be extremely confusing to others. Avoid them, + unless there is a compelling reason to use them. + + - Use the API. No, really. We have a strbuf (variable length + string), several arrays with the ALLOC_GROW() macro, a + string_list for sorted string lists, a hash map (mapping struct + objects) named "struct decorate", amongst other things. + + - When you come up with an API, document its functions and structures + in the header file that exposes the API to its callers. Use what is + in "strbuf.h" as a model for the appropriate tone and level of + detail. + + - The first #include in C files, except in platform specific compat/ + implementations and sha1dc/, must be . This + header file insulates other header files and source files from + platform differences, like which system header files must be + included in what order, and what C preprocessor feature macros must + be defined to trigger certain features we expect out of the system. + A collorary to this is that C files should not directly include + system header files themselves. + + There are some exceptions, because certain group of files that + implement an API all have to include the same header file that + defines the API and it is convenient to include + there. Namely: + + - the implementation of the built-in commands in the "builtin/" + directory that include "builtin.h" for the cmd_foo() prototype + definition, + + - the test helper programs in the "t/helper/" directory that include + "t/helper/test-tool.h" for the cmd__foo() prototype definition, + + - the xdiff implementation in the "xdiff/" directory that includes + "xdiff/xinclude.h" for the xdiff machinery internals, + + - the unit test programs in "t/unit-tests/" directory that include + "t/unit-tests/test-lib.h" that gives them the unit-tests + framework, and + + - the source files that implement reftable in the "reftable/" + directory that include "reftable/system.h" for the reftable + internals, + + are allowed to assume that they do not have to include + themselves, as it is included as the first + '#include' in these header files. These headers must be the first + header file to be "#include"d in them, though. + + - A C file must directly include the header files that declare the + functions and the types it uses, except for the functions and types + that are made available to it by including one of the header files + it must include by the previous rule. + + - If you are planning a new command, consider writing it in shell + or perl first, so that changes in semantics can be easily + changed and discussed. Many Git commands started out like + that, and a few are still scripts. + + - Avoid introducing a new dependency into Git. This means you + usually should stay away from scripting languages not already + used in the Git core command set (unless your command is clearly + separate from it, such as an importer to convert random-scm-X + repositories to Git). + + - When we pass pair to functions, we should try to + pass them in that order. + + - Use Git's gettext wrappers to make the user interface + translatable. See "Marking strings for translation" in po/README. + + - Variables and functions local to a given source file should be marked + with "static". Variables that are visible to other source files + must be declared with "extern" in header files. However, function + declarations should not use "extern", as that is already the default. + + - You can launch gdb around your program using the shorthand GIT_DEBUGGER. + Run `GIT_DEBUGGER=1 ./bin-wrappers/git foo` to simply use gdb as is, or + run `GIT_DEBUGGER=" " ./bin-wrappers/git foo` to + use your own debugger and arguments. Example: `GIT_DEBUGGER="ddd --gdb" + ./bin-wrappers/git log` (See `bin-wrappers/wrap-for-bin.sh`.) + + - The primary data structure that a subsystem 'S' deals with is called + `struct S`. Functions that operate on `struct S` are named + `S_()` and should generally receive a pointer to `struct S` as + first parameter. E.g. + + struct strbuf; + + void strbuf_add(struct strbuf *buf, ...); + + void strbuf_reset(struct strbuf *buf); + + is preferred over: + + struct strbuf; + + void add_string(struct strbuf *buf, ...); + + void reset_strbuf(struct strbuf *buf); + + - There are several common idiomatic names for functions performing + specific tasks on a structure `S`: + + - `S_init()` initializes a structure without allocating the + structure itself. + + - `S_release()` releases a structure's contents without freeing the + structure. + + - `S_clear()` is equivalent to `S_release()` followed by `S_init()` + such that the structure is directly usable after clearing it. When + `S_clear()` is provided, `S_init()` shall not allocate resources + that need to be released again. + + - `S_free()` releases a structure's contents and frees the + structure. + + - Function names should be clear and descriptive, accurately reflecting + their purpose or behavior. Arbitrary suffixes that do not add meaningful + context can lead to confusion, particularly for newcomers to the codebase. + + Historically, the '_1' suffix has been used in situations where: + + - A function handles one element among a group that requires similar + processing. + - A recursive function has been separated from its setup phase. + + The '_1' suffix can be used as a concise way to indicate these specific + cases. However, it is recommended to find a more descriptive name wherever + possible to improve the readability and maintainability of the code. + +For Perl programs: + + - Most of the C guidelines above apply. + + - We try to support Perl 5.8.1 and later ("use Perl 5.008001"). + + - use strict and use warnings are strongly preferred. + + - Don't overuse statement modifiers unless using them makes the + result easier to follow. + + ... do something ... + do_this() unless (condition); + ... do something else ... + + is more readable than: + + ... do something ... + unless (condition) { + do_this(); + } + ... do something else ... + + *only* when the condition is so rare that do_this() will be almost + always called. + + - We try to avoid assignments inside "if ()" conditions. + + - Learn and use Git.pm if you need that functionality. + +For Python scripts: + + - We follow PEP-8 (https://peps.python.org/pep-0008/). + + - As a minimum, we aim to be compatible with Python 2.7. + + - Where required libraries do not restrict us to Python 2, we try to + also be compatible with Python 3.1 and later. + + +Program Output + + We make a distinction between a Git command's primary output and + output which is merely chatty feedback (for instance, status + messages, running transcript, or progress display), as well as error + messages. Roughly speaking, a Git command's primary output is that + which one might want to capture to a file or send down a pipe; its + chatty output should not interfere with these use-cases. + + As such, primary output should be sent to the standard output stream + (stdout), and chatty output should be sent to the standard error + stream (stderr). Examples of commands which produce primary output + include `git log`, `git show`, and `git branch --list` which generate + output on the stdout stream. + + Not all Git commands have primary output; this is often true of + commands whose main function is to perform an action. Some action + commands are silent, whereas others are chatty. An example of a + chatty action commands is `git clone` with its "Cloning into + ''..." and "Checking connectivity..." status messages which it + sends to the stderr stream. + + Error messages from Git commands should always be sent to the stderr + stream. + + +Error Messages + + - Do not end a single-sentence error message with a full stop. + + - Do not capitalize the first word, only because it is the first word + in the message ("unable to open '%s'", not "Unable to open '%s'"). But + "SHA-3 not supported" is fine, because the reason the first word is + capitalized is not because it is at the beginning of the sentence, + but because the word would be spelled in capital letters even when + it appeared in the middle of the sentence. + + - Say what the error is first ("cannot open '%s'", not "%s: cannot open"). + + - Enclose the subject of an error inside a pair of single quotes, + e.g. `die(_("unable to open '%s'"), path)`. + + - Unless there is a compelling reason not to, error messages from + porcelain commands should be marked for translation, e.g. + `die(_("bad revision %s"), revision)`. + + - Error messages from the plumbing commands are sometimes meant for + machine consumption and should not be marked for translation, + e.g., `die("bad revision %s", revision)`. + + - BUG("message") are for communicating the specific error to developers, + thus should not be translated. + + +Externally Visible Names + + - For configuration variable names, follow the existing convention: + + . The section name indicates the affected subsystem. + + . The subsection name, if any, indicates which of an unbounded set + of things to set the value for. + + . The variable name describes the effect of tweaking this knob. + + The section and variable names that consist of multiple words are + formed by concatenating the words without punctuation marks (e.g. `-`), + and are broken using bumpyCaps in documentation as a hint to the + reader. + + When choosing the variable namespace, do not use variable name for + specifying possibly unbounded set of things, most notably anything + an end user can freely come up with (e.g. branch names). Instead, + use subsection names or variable values, like the existing variable + branch..description does. + + +Writing Documentation: + + Most (if not all) of the documentation pages are written in the + AsciiDoc format in *.txt files (e.g. Documentation/git.txt), and + processed into HTML and manpages (e.g. git.html and git.1 in the + same directory). + + The documentation liberally mixes US and UK English (en_US/UK) + norms for spelling and grammar, which is somewhat unfortunate. + In an ideal world, it would have been better if it consistently + used only one and not the other, and we would have picked en_US + (if you wish to correct the English of some of the existing + documentation, please see the documentation-related advice in the + Documentation/SubmittingPatches file). + + In order to ensure the documentation is inclusive, avoid assuming + that an unspecified example person is male or female, and think + twice before using "he", "him", "she", or "her". Here are some + tips to avoid use of gendered pronouns: + + - Prefer succinctness and matter-of-factly describing functionality + in the abstract. E.g. + + `--short`:: Emit output in the short-format. + + and avoid something like these overly verbose alternatives: + + `--short`:: Use this to emit output in the short-format. + `--short`:: You can use this to get output in the short-format. + `--short`:: A user who prefers shorter output could.... + `--short`:: Should a person and/or program want shorter output, he + she/they/it can... + + This practice often eliminates the need to involve human actors in + your description, but it is a good practice regardless of the + avoidance of gendered pronouns. + + - When it becomes awkward to stick to this style, prefer "you" when + addressing the hypothetical user, and possibly "we" when + discussing how the program might react to the user. E.g. + + You can use this option instead of `--xyz`, but we might remove + support for it in future versions. + + while keeping in mind that you can probably be less verbose, e.g. + + Use this instead of `--xyz`. This option might be removed in future + versions. + + - If you still need to refer to an example person that is + third-person singular, you may resort to "singular they" to avoid + "he/she/him/her", e.g. + + A contributor asks their upstream to pull from them. + + Note that this sounds ungrammatical and unnatural to those who + learned that "they" is only used for third-person plural, e.g. + those who learn English as a second language in some parts of the + world. + + Every user-visible change should be reflected in the documentation. + The same general rule as for code applies -- imitate the existing + conventions. + + +Markup: + + Literal parts (e.g. use of command-line options, command names, + branch names, URLs, pathnames (files and directories), configuration and + environment variables) must be typeset as verbatim (i.e. wrapped with + backticks): + `--pretty=oneline` + `git rev-list` + `remote.pushDefault` + `http://git.example.com` + `.git/config` + `GIT_DIR` + `HEAD` + `umask`(2) + + An environment variable must be prefixed with "$" only when referring to its + value and not when referring to the variable itself, in this case there is + nothing to add except the backticks: + `GIT_DIR` is specified + `$GIT_DIR/hooks/pre-receive` + + Word phrases enclosed in `backtick characters` are rendered literally + and will not be further expanded. The use of `backticks` to achieve the + previous rule means that literal examples should not use AsciiDoc + escapes. + Correct: + `--pretty=oneline` + Incorrect: + `\--pretty=oneline` + + Placeholders are spelled in lowercase and enclosed in + angle brackets surrounded by underscores: + __ + __ + + If a placeholder has multiple words, they are separated by dashes: + __ + __ + + When needed, use a distinctive identifier for placeholders, usually + made of a qualification and a type: + __ + __ + + Git's Asciidoc processor has been tailored to treat backticked text + as complex synopsis. When literal and placeholders are mixed, you can + use the backtick notation which will take care of correctly typesetting + the content. + `--jobs ` + `--sort=` + `/.git` + `remote..mirror` + `ssh://[@][:]/` + +As a side effect, backquoted placeholders are correctly typeset, but +this style is not recommended. + +Synopsis Syntax + + The synopsis (a paragraph with [synopsis] attribute) is automatically + formatted by the toolchain and does not need typesetting. + + A few commented examples follow to provide reference when writing or + modifying command usage strings and synopsis sections in the manual + pages: + + Possibility of multiple occurrences is indicated by three dots: + ... + (One or more of .) + + Optional parts are enclosed in square brackets: + [...] + (Zero or more of .) + + An optional parameter needs to be typeset with unconstrained pairs + [] + + --exec-path[=] + (Option with an optional argument. Note that the "=" is inside the + brackets.) + + [...] + (Zero or more of . Note that the dots are inside, not + outside the brackets.) + + Multiple alternatives are indicated with vertical bars: + [-q | --quiet] + [--utf8 | --no-utf8] + + Use spacing around "|" token(s), but not immediately after opening or + before closing a [] or () pair: + Do: [-q | --quiet] + Don't: [-q|--quiet] + + Don't use spacing around "|" tokens when they're used to separate the + alternate arguments of an option: + Do: --track[=(direct|inherit)] + Don't: --track[=(direct | inherit)] + + Parentheses are used for grouping: + [(|)...] + (Any number of either or . Parens are needed to make + it clear that "..." pertains to both and .) + + [(-p )...] + (Any number of option -p, each with one argument.) + + git remote set-head (-a|-d|) + (One and only one of "-a", "-d" or "" _must_ (no square + brackets) be provided.) + + And a somewhat more contrived example: + --diff-filter=[(A|C|D|M|R|T|U|X|B)...[*]] + Here "=" is outside the brackets, because "--diff-filter=" is a + valid usage. "*" has its own pair of brackets, because it can + (optionally) be specified only when one or more of the letters is + also provided. + + A note on notation: + Use 'git' (all lowercase) when talking about commands i.e. something + the user would type into a shell and use 'Git' (uppercase first letter) + when talking about the version control system and its properties. + + If some place in the documentation needs to typeset a command usage + example with inline substitutions, it is fine to use +monospaced and + inline substituted text+ instead of `monospaced literal text`, and with + the former, the part that should not get substituted must be + quoted/escaped. diff --git a/Documentation/DecisionMaking.adoc b/Documentation/DecisionMaking.adoc new file mode 100644 index 0000000000..b43c472ae5 --- /dev/null +++ b/Documentation/DecisionMaking.adoc @@ -0,0 +1,74 @@ +Decision-Making Process in the Git Project +========================================== + +Introduction +------------ +This document describes the current decision-making process in the Git +project. It is a descriptive rather than prescriptive doc; that is, we want to +describe how things work in practice rather than explicitly recommending any +particular process or changes to the current process. + +Here we document how the project makes decisions for discussions +(with or without patches), in scale larger than an individual patch +series (which is fully covered by the SubmittingPatches document). + + +Larger Discussions (with patches) +--------------------------------- +As with discussions on an individual patch series, starting a larger-scale +discussion often begins by sending a patch or series to the list. This might +take the form of an initial design doc, with implementation following in later +iterations of the series (for example, +link:https://lore.kernel.org/git/0169ce6fb9ccafc089b74ae406db0d1a8ff8ac65.1688165272.git.steadmon@google.com/[adding unit tests] or +link:https://lore.kernel.org/git/20200420235310.94493-1-emilyshaffer@google.com/[config-based hooks]), +or it might include a full implementation from the beginning. +In either case, discussion progresses the same way for an individual patch series, +until consensus is reached or the topic is dropped. + + +Larger Discussions (without patches) +------------------------------------ +Occasionally, larger discussions might occur without an associated patch series. +These may be very large-scale technical decisions that are beyond the scope of +even a single large patch series, or they may be more open-ended, +policy-oriented discussions (examples: +link:https://lore.kernel.org/git/ZZ77NQkSuiRxRDwt@nand.local/[introducing Rust] +or link:https://lore.kernel.org/git/YHofmWcIAidkvJiD@google.com/[improving submodule UX]). +In either case, discussion progresses as described above for general patch series. + +For larger discussions without a patch series or other concrete implementation, +it may be hard to judge when consensus has been reached, as there are not any +official guidelines. If discussion stalls at this point, it may be helpful to +restart discussion with an RFC patch series (such as a partial, unfinished +implementation or proof of concept) that can be more easily debated. + +When consensus is reached that it is a good idea, the original +proposer is expected to coordinate the effort to make it happen, +with help from others who were involved in the discussion, as +needed. + +For decisions that require code changes, it is often the case that the original +proposer will follow up with a patch series, although it is also common for +other interested parties to provide an implementation (or parts of the +implementation, for very large changes). + +For non-technical decisions such as community norms or processes, it is up to +the community as a whole to implement and sustain agreed-upon changes. +The project leadership committee (PLC) may help the implementation of +policy decisions. + + +Other Discussion Venues +----------------------- +Occasionally decision proposals are presented off-list, e.g. at the semi-regular +Contributors' Summit. While higher-bandwidth face-to-face discussion is often +useful for quickly reaching consensus among attendees, generally we expect to +summarize the discussion in notes that can later be presented on-list. For an +example, see the thread +link:https://lore.kernel.org/git/AC2EB721-2979-43FD-922D-C5076A57F24B@jramsay.com.au/[Notes +from Git Contributor Summit, Los Angeles (April 5, 2020)] by James Ramsay. + +We prefer that "official" discussion happens on the list so that the full +community has opportunity to engage in discussion. This also means that the +mailing list archives contain a more-or-less complete history of project +discussions and decisions. diff --git a/Documentation/Makefile b/Documentation/Makefile new file mode 100644 index 0000000000..9d239d380d --- /dev/null +++ b/Documentation/Makefile @@ -0,0 +1,526 @@ +# Import tree-wide shared Makefile behavior and libraries +include ../shared.mak + +.PHONY: FORCE + +# Guard against environment variables +MAN1_TXT = +MAN5_TXT = +MAN7_TXT = +HOWTO_TXT = +DOC_DEP_TXT = +TECH_DOCS = +ARTICLES = +SP_ARTICLES = +OBSOLETE_HTML = + +-include GIT-EXCLUDED-PROGRAMS + +MAN1_TXT += $(filter-out \ + $(patsubst %,%.adoc,$(EXCLUDED_PROGRAMS)) \ + $(addsuffix .adoc, $(ARTICLES) $(SP_ARTICLES)), \ + $(wildcard git-*.adoc)) +MAN1_TXT += git.adoc +MAN1_TXT += gitk.adoc +MAN1_TXT += gitweb.adoc +MAN1_TXT += scalar.adoc + +# man5 / man7 guides (note: new guides should also be added to command-list.txt) +MAN5_TXT += gitattributes.adoc +MAN5_TXT += gitformat-bundle.adoc +MAN5_TXT += gitformat-chunk.adoc +MAN5_TXT += gitformat-commit-graph.adoc +MAN5_TXT += gitformat-index.adoc +MAN5_TXT += gitformat-pack.adoc +MAN5_TXT += gitformat-signature.adoc +MAN5_TXT += githooks.adoc +MAN5_TXT += gitignore.adoc +MAN5_TXT += gitmailmap.adoc +MAN5_TXT += gitmodules.adoc +MAN5_TXT += gitprotocol-capabilities.adoc +MAN5_TXT += gitprotocol-common.adoc +MAN5_TXT += gitprotocol-http.adoc +MAN5_TXT += gitprotocol-pack.adoc +MAN5_TXT += gitprotocol-v2.adoc +MAN5_TXT += gitrepository-layout.adoc +MAN5_TXT += gitweb.conf.adoc + +MAN7_TXT += gitcli.adoc +MAN7_TXT += gitcore-tutorial.adoc +MAN7_TXT += gitcredentials.adoc +MAN7_TXT += gitcvs-migration.adoc +MAN7_TXT += gitdiffcore.adoc +MAN7_TXT += giteveryday.adoc +MAN7_TXT += gitfaq.adoc +MAN7_TXT += gitglossary.adoc +MAN7_TXT += gitpacking.adoc +MAN7_TXT += gitnamespaces.adoc +MAN7_TXT += gitremote-helpers.adoc +MAN7_TXT += gitrevisions.adoc +MAN7_TXT += gitsubmodules.adoc +MAN7_TXT += gittutorial-2.adoc +MAN7_TXT += gittutorial.adoc +MAN7_TXT += gitworkflows.adoc + +HOWTO_TXT += $(wildcard howto/*.adoc) + +DOC_DEP_TXT += $(wildcard *.adoc) +DOC_DEP_TXT += $(wildcard config/*.adoc) +DOC_DEP_TXT += $(wildcard includes/*.adoc) + +ifdef MAN_FILTER +MAN_TXT = $(filter $(MAN_FILTER),$(MAN1_TXT) $(MAN5_TXT) $(MAN7_TXT)) +else +MAN_TXT = $(MAN1_TXT) $(MAN5_TXT) $(MAN7_TXT) +MAN_FILTER = $(MAN_TXT) +endif + +MAN_XML = $(patsubst %.adoc,%.xml,$(MAN_TXT)) +MAN_HTML = $(patsubst %.adoc,%.html,$(MAN_TXT)) +GIT_MAN_REF = master + +OBSOLETE_HTML += everyday.html +OBSOLETE_HTML += git-remote-helpers.html + +ARTICLES += howto-index +ARTICLES += git-tools +ARTICLES += git-bisect-lk2009 +# with their own formatting rules. +SP_ARTICLES += user-manual +SP_ARTICLES += howto/new-command +SP_ARTICLES += howto/revert-branch-rebase +SP_ARTICLES += howto/using-merge-subtree +SP_ARTICLES += howto/using-signed-tag-in-pull-request +SP_ARTICLES += howto/use-git-daemon +SP_ARTICLES += howto/update-hook-example +SP_ARTICLES += howto/setup-git-server-over-http +SP_ARTICLES += howto/separating-topic-branches +SP_ARTICLES += howto/revert-a-faulty-merge +SP_ARTICLES += howto/recover-corrupted-blob-object +SP_ARTICLES += howto/recover-corrupted-object-harder +SP_ARTICLES += howto/rebuild-from-update-hook +SP_ARTICLES += howto/rebase-from-internal-branch +SP_ARTICLES += howto/keep-canonical-history-correct +SP_ARTICLES += howto/maintain-git +SP_ARTICLES += howto/coordinate-embargoed-releases +API_DOCS = $(patsubst %.adoc,%,$(filter-out technical/api-index-skel.adoc technical/api-index.adoc, $(wildcard technical/api-*.adoc))) +SP_ARTICLES += $(API_DOCS) + +TECH_DOCS += DecisionMaking +TECH_DOCS += ReviewingGuidelines +TECH_DOCS += MyFirstContribution +TECH_DOCS += MyFirstObjectWalk +TECH_DOCS += SubmittingPatches +TECH_DOCS += ToolsForGit +TECH_DOCS += technical/bitmap-format +TECH_DOCS += technical/build-systems +TECH_DOCS += technical/bundle-uri +TECH_DOCS += technical/hash-function-transition +TECH_DOCS += technical/long-running-process-protocol +TECH_DOCS += technical/multi-pack-index +TECH_DOCS += technical/pack-heuristics +TECH_DOCS += technical/parallel-checkout +TECH_DOCS += technical/partial-clone +TECH_DOCS += technical/platform-support +TECH_DOCS += technical/racy-git +TECH_DOCS += technical/reftable +TECH_DOCS += technical/scalar +TECH_DOCS += technical/send-pack-pipeline +TECH_DOCS += technical/shallow +TECH_DOCS += technical/trivial-merge +TECH_DOCS += technical/unit-tests +SP_ARTICLES += $(TECH_DOCS) +SP_ARTICLES += technical/api-index + +ARTICLES_HTML += $(patsubst %,%.html,$(ARTICLES) $(SP_ARTICLES)) +HTML_FILTER ?= $(ARTICLES_HTML) $(OBSOLETE_HTML) +DOC_HTML = $(MAN_HTML) $(filter $(HTML_FILTER),$(ARTICLES_HTML) $(OBSOLETE_HTML)) + +DOC_MAN1 = $(patsubst %.adoc,%.1,$(filter $(MAN_FILTER),$(MAN1_TXT))) +DOC_MAN5 = $(patsubst %.adoc,%.5,$(filter $(MAN_FILTER),$(MAN5_TXT))) +DOC_MAN7 = $(patsubst %.adoc,%.7,$(filter $(MAN_FILTER),$(MAN7_TXT))) + +prefix ?= $(HOME) +bindir ?= $(prefix)/bin +htmldir ?= $(prefix)/share/doc/git-doc +infodir ?= $(prefix)/share/info +pdfdir ?= $(prefix)/share/doc/git-doc +mandir ?= $(prefix)/share/man +man1dir = $(mandir)/man1 +man5dir = $(mandir)/man5 +man7dir = $(mandir)/man7 +# DESTDIR = + +ASCIIDOC = asciidoc +ASCIIDOC_EXTRA = +ASCIIDOC_HTML = xhtml11 +ASCIIDOC_DOCBOOK = docbook +ASCIIDOC_CONF = -f asciidoc.conf +ASCIIDOC_COMMON = $(ASCIIDOC) $(ASCIIDOC_EXTRA) $(ASCIIDOC_CONF) +ASCIIDOC_DEPS = asciidoc.conf GIT-ASCIIDOCFLAGS +TXT_TO_HTML = $(ASCIIDOC_COMMON) -b $(ASCIIDOC_HTML) +TXT_TO_XML = $(ASCIIDOC_COMMON) -b $(ASCIIDOC_DOCBOOK) +MANPAGE_XSL = manpage-normal.xsl +XMLTO = xmlto +XMLTO_EXTRA = +INSTALL ?= install +RM ?= rm -f +MAN_REPO = ../../git-manpages +HTML_REPO = ../../git-htmldocs + +MAKEINFO = makeinfo +INSTALL_INFO = install-info +DOCBOOK2X_TEXI = docbook2x-texi +DBLATEX = dblatex +ASCIIDOC_DBLATEX_DIR = /etc/asciidoc/dblatex +DBLATEX_COMMON = -p $(ASCIIDOC_DBLATEX_DIR)/asciidoc-dblatex.xsl -s $(ASCIIDOC_DBLATEX_DIR)/asciidoc-dblatex.sty +ifndef PERL_PATH + PERL_PATH = /usr/bin/perl +endif + +-include ../config.mak.autogen +-include ../config.mak + +# Set GIT_VERSION_OVERRIDE such that version_gen knows to substitute +# GIT_VERSION in case it was set by the user. +GIT_VERSION_OVERRIDE := $(GIT_VERSION) + +ifndef NO_MAN_BOLD_LITERAL +XMLTO_EXTRA += -m manpage-bold-literal.xsl +endif + +# Newer DocBook stylesheet emits warning cruft in the output when +# this is not set, and if set it shows an absolute link. Older +# stylesheets simply ignore this parameter. +# +# Distros may want to use MAN_BASE_URL=file:///path/to/git/docs/ +# or similar. +ifndef MAN_BASE_URL +MAN_BASE_URL = file://$(htmldir)/ +endif +XMLTO_EXTRA += --stringparam man.base.url.for.relative.links='$(MAN_BASE_URL)' + +ifdef USE_ASCIIDOCTOR +ASCIIDOC = asciidoctor +ASCIIDOC_CONF = +ASCIIDOC_HTML = xhtml5 +ASCIIDOC_DOCBOOK = docbook5 +ASCIIDOC_EXTRA += -acompat-mode -atabsize=8 +ASCIIDOC_EXTRA += -I. -rasciidoctor-extensions +ASCIIDOC_EXTRA += -alitdd='&\#x2d;&\#x2d;' +ASCIIDOC_EXTRA += -adocinfo=shared +ASCIIDOC_DEPS = asciidoctor-extensions.rb GIT-ASCIIDOCFLAGS +DBLATEX_COMMON = +XMLTO_EXTRA += --skip-validation +XMLTO_EXTRA += -x manpage.xsl + +asciidoctor-extensions.rb: asciidoctor-extensions.rb.in FORCE + $(QUIET_GEN)$(call version_gen,"$(shell pwd)/..",$<,$@) +else +asciidoc.conf: asciidoc.conf.in FORCE + $(QUIET_GEN)$(call version_gen,"$(shell pwd)/..",$<,$@) +endif + +ASCIIDOC_DEPS += docinfo.html + +SHELL_PATH ?= $(SHELL) +# Shell quote; +SHELL_PATH_SQ = $(subst ','\'',$(SHELL_PATH)) + +ASCIIDOC_EXTRA += -abuild_dir='$(shell pwd)' +ifdef DEFAULT_PAGER +DEFAULT_PAGER_SQ = $(subst ','\'',$(DEFAULT_PAGER)) +ASCIIDOC_EXTRA += -a 'git-default-pager=$(DEFAULT_PAGER_SQ)' +endif + +ifdef DEFAULT_EDITOR +DEFAULT_EDITOR_SQ = $(subst ','\'',$(DEFAULT_EDITOR)) +ASCIIDOC_EXTRA += -a 'git-default-editor=$(DEFAULT_EDITOR_SQ)' +endif + +all: html man + +html: $(DOC_HTML) + +man: man1 man5 man7 +man1: $(DOC_MAN1) +man5: $(DOC_MAN5) +man7: $(DOC_MAN7) + +info: git.info gitman.info + +pdf: user-manual.pdf + +install: install-man + +install-man: man + $(INSTALL) -d -m 755 $(DESTDIR)$(man1dir) + $(INSTALL) -d -m 755 $(DESTDIR)$(man5dir) + $(INSTALL) -d -m 755 $(DESTDIR)$(man7dir) + $(INSTALL) -m 644 $(DOC_MAN1) $(DESTDIR)$(man1dir) + $(INSTALL) -m 644 $(DOC_MAN5) $(DESTDIR)$(man5dir) + $(INSTALL) -m 644 $(DOC_MAN7) $(DESTDIR)$(man7dir) + +install-info: info + $(INSTALL) -d -m 755 $(DESTDIR)$(infodir) + $(INSTALL) -m 644 git.info gitman.info $(DESTDIR)$(infodir) + if test -r $(DESTDIR)$(infodir)/dir; then \ + $(INSTALL_INFO) --info-dir=$(DESTDIR)$(infodir) git.info ;\ + $(INSTALL_INFO) --info-dir=$(DESTDIR)$(infodir) gitman.info ;\ + else \ + echo "No directory found in $(DESTDIR)$(infodir)" >&2 ; \ + fi + +install-pdf: pdf + $(INSTALL) -d -m 755 $(DESTDIR)$(pdfdir) + $(INSTALL) -m 644 user-manual.pdf $(DESTDIR)$(pdfdir) + +install-html: html + '$(SHELL_PATH_SQ)' ./install-webdoc.sh $(DESTDIR)$(htmldir) + +mergetools_txt = mergetools-diff.adoc mergetools-merge.adoc + +# +# Determine "include::" file references in asciidoc files. +# +docdep_prereqs = \ + $(mergetools_txt) \ + cmd-list.made $(cmds_txt) + +doc.dep : $(docdep_prereqs) $(DOC_DEP_TXT) build-docdep.perl + $(QUIET_GEN)$(PERL_PATH) ./build-docdep.perl "$(shell pwd)" >$@ $(QUIET_STDERR) + +ifneq ($(MAKECMDGOALS),clean) +-include doc.dep +endif + +cmds_txt = cmds-ancillaryinterrogators.adoc \ + cmds-ancillarymanipulators.adoc \ + cmds-mainporcelain.adoc \ + cmds-plumbinginterrogators.adoc \ + cmds-plumbingmanipulators.adoc \ + cmds-synchingrepositories.adoc \ + cmds-synchelpers.adoc \ + cmds-guide.adoc \ + cmds-developerinterfaces.adoc \ + cmds-userinterfaces.adoc \ + cmds-purehelpers.adoc \ + cmds-foreignscminterface.adoc + +$(cmds_txt): cmd-list.made + +cmd-list.made: cmd-list.perl ../command-list.txt $(MAN1_TXT) + $(QUIET_GEN)$(PERL_PATH) ./cmd-list.perl .. . $(cmds_txt) && \ + date >$@ + +mergetools-%.adoc: generate-mergetool-list.sh ../git-mergetool--lib.sh $(wildcard ../mergetools/*) +mergetools-diff.adoc: + $(QUIET_GEN)$(SHELL_PATH) ./generate-mergetool-list.sh .. diff $@ +mergetools-merge.adoc: + $(QUIET_GEN)$(SHELL_PATH) ./generate-mergetool-list.sh .. merge $@ + +TRACK_ASCIIDOCFLAGS = $(subst ','\'',$(ASCIIDOC_COMMON):$(ASCIIDOC_HTML):$(ASCIIDOC_DOCBOOK)) + +GIT-ASCIIDOCFLAGS: FORCE + @FLAGS='$(TRACK_ASCIIDOCFLAGS)'; \ + if test x"$$FLAGS" != x"`cat GIT-ASCIIDOCFLAGS 2>/dev/null`" ; then \ + echo >&2 " * new asciidoc flags"; \ + echo "$$FLAGS" >GIT-ASCIIDOCFLAGS; \ + fi + +clean: + $(RM) -rf .build/ + $(RM) *.xml *.xml+ *.html *.html+ *.1 *.5 *.7 + $(RM) *.texi *.texi+ *.texi++ git.info gitman.info + $(RM) *.pdf + $(RM) howto-index.txt howto/*.html doc.dep + $(RM) technical/*.html technical/api-index.adoc + $(RM) SubmittingPatches.adoc + $(RM) $(cmds_txt) $(mergetools_txt) *.made + $(RM) GIT-ASCIIDOCFLAGS + $(RM) asciidoc.conf asciidoctor-extensions.rb + $(RM) -rf tmp-meson-diff + +docinfo.html: docinfo-html.in + $(QUIET_GEN)$(RM) $@ && cat $< >$@ + +$(MAN_HTML): %.html : %.adoc $(ASCIIDOC_DEPS) + $(QUIET_ASCIIDOC)$(TXT_TO_HTML) -d manpage -o $@ $< + +$(OBSOLETE_HTML): %.html : %.txto $(ASCIIDOC_DEPS) + $(QUIET_ASCIIDOC)$(TXT_TO_HTML) -o $@ $< + +manpage-prereqs := $(wildcard manpage*.xsl) +manpage-cmd = $(QUIET_XMLTO)$(XMLTO) -m $(MANPAGE_XSL) $(XMLTO_EXTRA) man $< + +%.1 : %.xml $(manpage-prereqs) + $(manpage-cmd) +%.5 : %.xml $(manpage-prereqs) + $(manpage-cmd) +%.7 : %.xml $(manpage-prereqs) + $(manpage-cmd) + +%.xml : %.adoc $(ASCIIDOC_DEPS) + $(QUIET_ASCIIDOC)$(TXT_TO_XML) -d manpage -o $@ $< + +user-manual.xml: user-manual.adoc $(ASCIIDOC_DEPS) + $(QUIET_ASCIIDOC)$(TXT_TO_XML) -d book -o $@ $< + +technical/api-index.adoc: technical/api-index-skel.adoc \ + technical/api-index.sh $(patsubst %,%.adoc,$(API_DOCS)) + $(QUIET_GEN)'$(SHELL_PATH_SQ)' technical/api-index.sh ./technical ./technical/api-index.adoc + +technical/%.html: ASCIIDOC_EXTRA += -a git-relative-html-prefix=../ +$(patsubst %,%.html,$(API_DOCS) technical/api-index $(TECH_DOCS)): %.html : %.adoc \ + $(ASCIIDOC_DEPS) + $(QUIET_ASCIIDOC)$(TXT_TO_HTML) $*.adoc + +SubmittingPatches.adoc: SubmittingPatches + $(QUIET_GEN) cp $< $@ + +XSLT = docbook.xsl +XSLTOPTS = +XSLTOPTS += --xinclude +XSLTOPTS += --stringparam html.stylesheet docbook-xsl.css +XSLTOPTS += --param generate.consistent.ids 1 + +user-manual.html: user-manual.xml $(XSLT) + $(QUIET_XSLTPROC)xsltproc $(XSLTOPTS) -o $@ $(XSLT) $< + +git.info: user-manual.texi + $(QUIET_MAKEINFO)$(MAKEINFO) --no-split -o $@ user-manual.texi + +user-manual.texi: user-manual.xml + $(QUIET_DB2TEXI)$(DOCBOOK2X_TEXI) user-manual.xml --encoding=UTF-8 --to-stdout >$@+ && \ + $(PERL_PATH) fix-texi.perl <$@+ >$@ && \ + $(RM) $@+ + +user-manual.pdf: user-manual.xml + $(QUIET_DBLATEX)$(DBLATEX) -o $@ $(DBLATEX_COMMON) $< + +gitman.texi: $(MAN_XML) cat-texi.perl texi.xsl + $(QUIET_DB2TEXI) \ + ($(foreach xml,$(sort $(MAN_XML)),xsltproc -o $(xml)+ texi.xsl $(xml) && \ + $(DOCBOOK2X_TEXI) --encoding=UTF-8 --to-stdout $(xml)+ && \ + $(RM) $(xml)+ &&) true) > $@+ && \ + $(PERL_PATH) cat-texi.perl $@ <$@+ >$@ && \ + $(RM) $@+ + +gitman.info: gitman.texi + $(QUIET_MAKEINFO)$(MAKEINFO) --no-split --no-validate $< + +$(patsubst %.adoc,%.texi,$(MAN_TXT)): %.texi : %.xml + $(QUIET_DB2TEXI)$(DOCBOOK2X_TEXI) --to-stdout $*.xml >$@ + +howto-index.adoc: howto/howto-index.sh $(HOWTO_TXT) + $(QUIET_GEN)'$(SHELL_PATH_SQ)' ./howto/howto-index.sh $(sort $(HOWTO_TXT)) >$@ + +$(patsubst %,%.html,$(ARTICLES)) : %.html : %.adoc $(ASCIIDOC_DEPS) + $(QUIET_ASCIIDOC)$(TXT_TO_HTML) $*.adoc + +WEBDOC_DEST = /pub/software/scm/git/docs + +howto/%.html: ASCIIDOC_EXTRA += -a git-relative-html-prefix=../ +$(patsubst %.adoc,%.html,$(HOWTO_TXT)): %.html : %.adoc $(ASCIIDOC_DEPS) + $(QUIET_ASCIIDOC) \ + sed -e '1,/^$$/d' $< | \ + $(TXT_TO_HTML) - >$@ + +install-webdoc : html + '$(SHELL_PATH_SQ)' ./install-webdoc.sh $(WEBDOC_DEST) + +# You must have a clone of 'git-htmldocs' and 'git-manpages' repositories +# next to the 'git' repository itself for the following to work. + +quick-install: quick-install-man + +require-manrepo:: + @if test ! -d $(MAN_REPO); \ + then echo "git-manpages repository must exist at $(MAN_REPO)"; exit 1; fi + +quick-install-man: require-manrepo + '$(SHELL_PATH_SQ)' ./install-doc-quick.sh $(MAN_REPO) $(DESTDIR)$(mandir) $(GIT_MAN_REF) + +require-htmlrepo:: + @if test ! -d $(HTML_REPO); \ + then echo "git-htmldocs repository must exist at $(HTML_REPO)"; exit 1; fi + +quick-install-html: require-htmlrepo + '$(SHELL_PATH_SQ)' ./install-doc-quick.sh $(HTML_REPO) $(DESTDIR)$(htmldir) $(GIT_MAN_REF) + +print-man1: + @for i in $(MAN1_TXT); do echo $$i; done + +## Lint: gitlink +LINT_DOCS_GITLINK = $(patsubst %.adoc,.build/lint-docs/gitlink/%.ok,$(HOWTO_TXT) $(DOC_DEP_TXT)) +$(LINT_DOCS_GITLINK): lint-gitlink.perl +$(LINT_DOCS_GITLINK): .build/lint-docs/gitlink/%.ok: %.adoc + $(call mkdir_p_parent_template) + $(QUIET_LINT_GITLINK)$(PERL_PATH) lint-gitlink.perl \ + $< \ + $(HOWTO_TXT) $(DOC_DEP_TXT) \ + --section=1 $(MAN1_TXT) \ + --section=5 $(MAN5_TXT) \ + --section=7 $(MAN7_TXT) >$@ +.PHONY: lint-docs-gitlink +lint-docs-gitlink: $(LINT_DOCS_GITLINK) + +## Lint: man-end-blurb +LINT_DOCS_MAN_END_BLURB = $(patsubst %.adoc,.build/lint-docs/man-end-blurb/%.ok,$(MAN_TXT)) +$(LINT_DOCS_MAN_END_BLURB): lint-man-end-blurb.perl +$(LINT_DOCS_MAN_END_BLURB): .build/lint-docs/man-end-blurb/%.ok: %.adoc + $(call mkdir_p_parent_template) + $(QUIET_LINT_MANEND)$(PERL_PATH) lint-man-end-blurb.perl $< >$@ +.PHONY: lint-docs-man-end-blurb + +## Lint: man-section-order +LINT_DOCS_MAN_SECTION_ORDER = $(patsubst %.adoc,.build/lint-docs/man-section-order/%.ok,$(MAN_TXT)) +$(LINT_DOCS_MAN_SECTION_ORDER): lint-man-section-order.perl +$(LINT_DOCS_MAN_SECTION_ORDER): .build/lint-docs/man-section-order/%.ok: %.adoc + $(call mkdir_p_parent_template) + $(QUIET_LINT_MANSEC)$(PERL_PATH) lint-man-section-order.perl $< >$@ +.PHONY: lint-docs-man-section-order +lint-docs-man-section-order: $(LINT_DOCS_MAN_SECTION_ORDER) + +.PHONY: lint-docs-fsck-msgids +LINT_DOCS_FSCK_MSGIDS = .build/lint-docs/fsck-msgids.ok +$(LINT_DOCS_FSCK_MSGIDS): lint-fsck-msgids.perl +$(LINT_DOCS_FSCK_MSGIDS): ../fsck.h fsck-msgids.adoc + $(call mkdir_p_parent_template) + $(QUIET_GEN)$(PERL_PATH) lint-fsck-msgids.perl \ + ../fsck.h fsck-msgids.adoc $@ + +lint-docs-fsck-msgids: $(LINT_DOCS_FSCK_MSGIDS) + +lint-docs-manpages: + $(QUIET_GEN)./lint-manpages.sh + +.PHONY: lint-docs-meson +lint-docs-meson: + @# awk acts up when trying to match single quotes, so we use \047 instead. + @mkdir -p tmp-meson-diff && \ + awk "/^manpages = {$$/ {flag=1 ; next } /^}$$/ { flag=0 } flag { gsub(/^ \047/, \"\"); gsub(/\047 : [157],\$$/, \"\"); print }" meson.build | \ + grep -v -e '#' -e '^$$' | \ + sort >tmp-meson-diff/meson.adoc && \ + ls git*.adoc scalar.adoc | grep -v -e git-bisect-lk2009.adoc -e git-tools.adoc >tmp-meson-diff/actual.adoc && \ + if ! cmp tmp-meson-diff/meson.adoc tmp-meson-diff/actual.adoc; then \ + echo "Meson man pages differ from actual man pages:"; \ + diff -u tmp-meson-diff/meson.adoc tmp-meson-diff/actual.adoc; \ + exit 1; \ + fi + +## Lint: list of targets above +.PHONY: lint-docs +lint-docs: lint-docs-fsck-msgids +lint-docs: lint-docs-gitlink +lint-docs: lint-docs-man-end-blurb +lint-docs: lint-docs-man-section-order +lint-docs: lint-docs-manpages +lint-docs: lint-docs-meson + +ifeq ($(wildcard po/Makefile),po/Makefile) +doc-l10n install-l10n:: + $(MAKE) -C po $@ +endif + +.PHONY: FORCE diff --git a/Documentation/MyFirstContribution.adoc b/Documentation/MyFirstContribution.adoc new file mode 100644 index 0000000000..e41654c00a --- /dev/null +++ b/Documentation/MyFirstContribution.adoc @@ -0,0 +1,1395 @@ +My First Contribution to the Git Project +======================================== +:sectanchors: + +[[summary]] +== Summary + +This is a tutorial demonstrating the end-to-end workflow of creating a change to +the Git tree, sending it for review, and making changes based on comments. + +[[prerequisites]] +=== Prerequisites + +This tutorial assumes you're already fairly familiar with using Git to manage +source code. The Git workflow steps will largely remain unexplained. + +[[related-reading]] +=== Related Reading + +This tutorial aims to summarize the following documents, but the reader may find +useful additional context: + +- `Documentation/SubmittingPatches` +- `Documentation/howto/new-command.txt` + +[[getting-help]] +=== Getting Help + +If you get stuck, you can seek help in the following places. + +==== git@vger.kernel.org + +This is the main Git project mailing list where code reviews, version +announcements, design discussions, and more take place. Those interested in +contributing are welcome to post questions here. The Git list requires +plain-text-only emails and prefers inline and bottom-posting when replying to +mail; you will be CC'd in all replies to you. Optionally, you can subscribe to +the list by sending an email to +(see https://subspace.kernel.org/subscribing.html for details). +The https://lore.kernel.org/git[archive] of this mailing list is +available to view in a browser. + +==== https://groups.google.com/forum/#!forum/git-mentoring[git-mentoring@googlegroups.com] + +This mailing list is targeted to new contributors and was created as a place to +post questions and receive answers outside of the public eye of the main list. +Veteran contributors who are especially interested in helping mentor newcomers +are present on the list. In order to avoid search indexers, group membership is +required to view messages; anyone can join and no approval is required. + +==== https://web.libera.chat/#git-devel[#git-devel] on Libera Chat + +This IRC channel is for conversations between Git contributors. If someone is +currently online and knows the answer to your question, you can receive help +in real time. Otherwise, you can read the +https://colabti.org/irclogger/irclogger_logs/git-devel[scrollback] to see +whether someone answered you. IRC does not allow offline private messaging, so +if you try to private message someone and then log out of IRC, they cannot +respond to you. It's better to ask your questions in the channel so that you +can be answered if you disconnect and so that others can learn from the +conversation. + +[[getting-started]] +== Getting Started + +[[cloning]] +=== Clone the Git Repository + +Git is mirrored in a number of locations. Clone the repository from one of them; +https://git-scm.com/downloads suggests one of the best places to clone from is +the mirror on GitHub. + +---- +$ git clone https://github.com/git/git git +$ cd git +---- + +[[dependencies]] +=== Installing Dependencies + +To build Git from source, you need to have a handful of dependencies installed +on your system. For a hint of what's needed, you can take a look at +`INSTALL`, paying close attention to the section about Git's dependencies on +external programs and libraries. That document mentions a way to "test-drive" +our freshly built Git without installing; that's the method we'll be using in +this tutorial. + +Make sure that your environment has everything you need by building your brand +new clone of Git from the above step: + +---- +$ make +---- + +NOTE: The Git build is parallelizable. `-j#` is not included above but you can +use it as you prefer, here and elsewhere. + +[[identify-problem]] +=== Identify Problem to Solve + +//// +Use + to indicate fixed-width here; couldn't get ` to work nicely with the +quotes around "Pony Saying 'Um, Hello'". +//// +In this tutorial, we will add a new command, +git psuh+, short for ``Pony Saying +`Um, Hello''' - a feature which has gone unimplemented despite a high frequency +of invocation during users' typical daily workflow. + +(We've seen some other effort in this space with the implementation of popular +commands such as `sl`.) + +[[setup-workspace]] +=== Set Up Your Workspace + +Let's start by making a development branch to work on our changes. Per +`Documentation/SubmittingPatches`, since a brand new command is a new feature, +it's fine to base your work on `master`. However, in the future for bugfixes, +etc., you should check that document and base it on the appropriate branch. + +For the purposes of this document, we will base all our work on the `master` +branch of the upstream project. Create the `psuh` branch you will use for +development like so: + +---- +$ git checkout -b psuh origin/master +---- + +We'll make a number of commits here in order to demonstrate how to send a topic +with multiple patches up for review simultaneously. + +[[code-it-up]] +== Code It Up! + +NOTE: A reference implementation can be found at +https://github.com/nasamuffin/git/tree/psuh. + +[[add-new-command]] +=== Adding a New Command + +Lots of the subcommands are written as builtins, which means they are +implemented in C and compiled into the main `git` executable. Implementing the +very simple `psuh` command as a built-in will demonstrate the structure of the +codebase, the internal API, and the process of working together as a contributor +with the reviewers and maintainer to integrate this change into the system. + +Built-in subcommands are typically implemented in a function named "cmd_" +followed by the name of the subcommand, in a source file named after the +subcommand and contained within `builtin/`. So it makes sense to implement your +command in `builtin/psuh.c`. Create that file, and within it, write the entry +point for your command in a function matching the style and signature: + +---- +int cmd_psuh(int argc, const char **argv, const char *prefix) +---- + +We'll also need to add the declaration of psuh; open up `builtin.h`, find the +declaration for `cmd_pull`, and add a new line for `psuh` immediately before it, +in order to keep the declarations alphabetically sorted: + +---- +int cmd_psuh(int argc, const char **argv, const char *prefix); +---- + +Be sure to `#include "builtin.h"` in your `psuh.c`. You'll also need to +`#include "gettext.h"` to use functions related to printing output text. + +Go ahead and add some throwaway printf to the `cmd_psuh` function. This is a +decent starting point as we can now add build rules and register the command. + +NOTE: Your throwaway text, as well as much of the text you will be adding over +the course of this tutorial, is user-facing. That means it needs to be +localizable. Take a look at `po/README` under "Marking strings for translation". +Throughout the tutorial, we will mark strings for translation as necessary; you +should also do so when writing your user-facing commands in the future. + +---- +int cmd_psuh(int argc, const char **argv, const char *prefix) +{ + printf(_("Pony saying hello goes here.\n")); + return 0; +} +---- + +Let's try to build it. Open `Makefile`, find where `builtin/pull.o` is added +to `BUILTIN_OBJS`, and add `builtin/psuh.o` in the same way next to it in +alphabetical order. Once you've done so, move to the top-level directory and +build simply with `make`. Also add the `DEVELOPER=1` variable to turn on +some additional warnings: + +---- +$ echo DEVELOPER=1 >config.mak +$ make +---- + +NOTE: When you are developing the Git project, it's preferred that you use the +`DEVELOPER` flag; if there's some reason it doesn't work for you, you can turn +it off, but it's a good idea to mention the problem to the mailing list. + +Great, now your new command builds happily on its own. But nobody invokes it. +Let's change that. + +The list of commands lives in `git.c`. We can register a new command by adding +a `cmd_struct` to the `commands[]` array. `struct cmd_struct` takes a string +with the command name, a function pointer to the command implementation, and a +setup option flag. For now, let's keep mimicking `push`. Find the line where +`cmd_push` is registered, copy it, and modify it for `cmd_psuh`, placing the new +line in alphabetical order (immediately before `cmd_pull`). + +The options are documented in `builtin.h` under "Adding a new built-in." Since +we hope to print some data about the user's current workspace context later, +we need a Git directory, so choose `RUN_SETUP` as your only option. + +Go ahead and build again. You should see a clean build, so let's kick the tires +and see if it works. There's a binary you can use to test with in the +`bin-wrappers` directory. + +---- +$ ./bin-wrappers/git psuh +---- + +Check it out! You've got a command! Nice work! Let's commit this. + +`git status` reveals modified `Makefile`, `builtin.h`, and `git.c` as well as +untracked `builtin/psuh.c` and `git-psuh`. First, let's take care of the binary, +which should be ignored. Open `.gitignore` in your editor, find `/git-pull`, and +add an entry for your new command in alphabetical order: + +---- +... +/git-prune-packed +/git-psuh +/git-pull +/git-push +/git-quiltimport +/git-range-diff +... +---- + +Checking `git status` again should show that `git-psuh` has been removed from +the untracked list and `.gitignore` has been added to the modified list. Now we +can stage and commit: + +---- +$ git add Makefile builtin.h builtin/psuh.c git.c .gitignore +$ git commit -s +---- + +You will be presented with your editor in order to write a commit message. Start +the commit with a 50-column or less subject line, including the name of the +component you're working on, followed by a blank line (always required) and then +the body of your commit message, which should provide the bulk of the context. +Remember to be explicit and provide the "Why" of your change, especially if it +couldn't easily be understood from your diff. When editing your commit message, +don't remove the `Signed-off-by` trailer which was added by `-s` above. + +---- +psuh: add a built-in by popular demand + +Internal metrics indicate this is a command many users expect to be +present. So here's an implementation to help drive customer +satisfaction and engagement: a pony which doubtfully greets the user, +or, a Pony Saying "Um, Hello" (PSUH). + +This commit message is intentionally formatted to 72 columns per line, +starts with a single line as "commit message subject" that is written as +if to command the codebase to do something (add this, teach a command +that). The body of the message is designed to add information about the +commit that is not readily deduced from reading the associated diff, +such as answering the question "why?". + +Signed-off-by: A U Thor +---- + +Go ahead and inspect your new commit with `git show`. "psuh:" indicates you +have modified mainly the `psuh` command. The subject line gives readers an idea +of what you've changed. The sign-off line (`-s`) indicates that you agree to +the Developer's Certificate of Origin 1.1 (see the +`Documentation/SubmittingPatches` +++[[dco]]+++ header). + +For the remainder of the tutorial, the subject line only will be listed for the +sake of brevity. However, fully-fleshed example commit messages are available +on the reference implementation linked at the top of this document. + +[[implementation]] +=== Implementation + +It's probably useful to do at least something besides printing out a string. +Let's start by having a look at everything we get. + +Modify your `cmd_psuh` implementation to dump the args you're passed, keeping +existing `printf()` calls in place: + +---- + int i; + + ... + + printf(Q_("Your args (there is %d):\n", + "Your args (there are %d):\n", + argc), + argc); + for (i = 0; i < argc; i++) + printf("%d: %s\n", i, argv[i]); + + printf(_("Your current working directory:\n%s%s\n"), + prefix ? "/" : "", prefix ? prefix : ""); + +---- + +Build and try it. As you may expect, there's pretty much just whatever we give +on the command line, including the name of our command. (If `prefix` is empty +for you, try `cd Documentation/ && ../bin-wrappers/git psuh`). That's not so +helpful. So what other context can we get? + +Add a line to `#include "config.h"`. Then, add the following bits to the +function body: + +---- + const char *cfg_name; + +... + + git_config(git_default_config, NULL); + if (git_config_get_string_tmp("user.name", &cfg_name) > 0) + printf(_("No name is found in config\n")); + else + printf(_("Your name: %s\n"), cfg_name); +---- + +`git_config()` will grab the configuration from config files known to Git and +apply standard precedence rules. `git_config_get_string_tmp()` will look up +a specific key ("user.name") and give you the value. There are a number of +single-key lookup functions like this one; you can see them all (and more info +about how to use `git_config()`) in `Documentation/technical/api-config.txt`. + +You should see that the name printed matches the one you see when you run: + +---- +$ git config --get user.name +---- + +Great! Now we know how to check for values in the Git config. Let's commit this +too, so we don't lose our progress. + +---- +$ git add builtin/psuh.c +$ git commit -sm "psuh: show parameters & config opts" +---- + +NOTE: Again, the above is for sake of brevity in this tutorial. In a real change +you should not use `-m` but instead use the editor to write a meaningful +message. + +Still, it'd be nice to know what the user's working context is like. Let's see +if we can print the name of the user's current branch. We can mimic the +`git status` implementation; the printer is located in `wt-status.c` and we can +see that the branch is held in a `struct wt_status`. + +`wt_status_print()` gets invoked by `cmd_status()` in `builtin/commit.c`. +Looking at that implementation we see the status config being populated like so: + +---- +status_init_config(&s, git_status_config); +---- + +But as we drill down, we can find that `status_init_config()` wraps a call +to `git_config()`. Let's modify the code we wrote in the previous commit. + +Be sure to include the header to allow you to use `struct wt_status`: +---- +#include "wt-status.h" +---- + +Then modify your `cmd_psuh` implementation to declare your `struct wt_status`, +prepare it, and print its contents: + +---- + struct wt_status status; + +... + + wt_status_prepare(the_repository, &status); + git_config(git_default_config, &status); + +... + + printf(_("Your current branch: %s\n"), status.branch); +---- + +Run it again. Check it out - here's the (verbose) name of your current branch! + +Let's commit this as well. + +---- +$ git add builtin/psuh.c +$ git commit -sm "psuh: print the current branch" +---- + +Now let's see if we can get some info about a specific commit. + +Luckily, there are some helpers for us here. `commit.h` has a function called +`lookup_commit_reference_by_name` to which we can simply provide a hardcoded +string; `pretty.h` has an extremely handy `pp_commit_easy()` call which doesn't +require a full format object to be passed. + +Add the following includes: + +---- +#include "commit.h" +#include "pretty.h" +---- + +Then, add the following lines within your implementation of `cmd_psuh()` near +the declarations and the logic, respectively. + +---- + struct commit *c = NULL; + struct strbuf commitline = STRBUF_INIT; + +... + + c = lookup_commit_reference_by_name("origin/master"); + + if (c != NULL) { + pp_commit_easy(CMIT_FMT_ONELINE, c, &commitline); + printf(_("Current commit: %s\n"), commitline.buf); + } +---- + +The `struct strbuf` provides some safety belts to your basic `char*`, one of +which is a length member to prevent buffer overruns. It needs to be initialized +nicely with `STRBUF_INIT`. Keep it in mind when you need to pass around `char*`. + +`lookup_commit_reference_by_name` resolves the name you pass it, so you can play +with the value there and see what kind of things you can come up with. + +`pp_commit_easy` is a convenience wrapper in `pretty.h` that takes a single +format enum shorthand, rather than an entire format struct. It then +pretty-prints the commit according to that shorthand. These are similar to the +formats available with `--pretty=FOO` in many Git commands. + +Build it and run, and if you're using the same name in the example, you should +see the subject line of the most recent commit in `origin/master` that you know +about. Neat! Let's commit that as well. + +---- +$ git add builtin/psuh.c +$ git commit -sm "psuh: display the top of origin/master" +---- + +[[add-documentation]] +=== Adding Documentation + +Awesome! You've got a fantastic new command that you're ready to share with the +community. But hang on just a minute - this isn't very user-friendly. Run the +following: + +---- +$ ./bin-wrappers/git help psuh +---- + +Your new command is undocumented! Let's fix that. + +Take a look at `Documentation/git-*.txt`. These are the manpages for the +subcommands that Git knows about. You can open these up and take a look to get +acquainted with the format, but then go ahead and make a new file +`Documentation/git-psuh.txt`. Like with most of the documentation in the Git +project, help pages are written with AsciiDoc (see CodingGuidelines, "Writing +Documentation" section). Use the following template to fill out your own +manpage: + +// Surprisingly difficult to embed AsciiDoc source within AsciiDoc. +[listing] +.... +git-psuh(1) +=========== + +NAME +---- +git-psuh - Delight users' typo with a shy horse + + +SYNOPSIS +-------- +[verse] +'git-psuh [...]' + +DESCRIPTION +----------- +... + +OPTIONS[[OPTIONS]] +------------------ +... + +OUTPUT +------ +... + +GIT +--- +Part of the linkgit:git[1] suite +.... + +The most important pieces of this to note are the file header, underlined by =, +the NAME section, and the SYNOPSIS, which would normally contain the grammar if +your command took arguments. Try to use well-established manpage headers so your +documentation is consistent with other Git and UNIX manpages; this makes life +easier for your user, who can skip to the section they know contains the +information they need. + +NOTE: Before trying to build the docs, make sure you have the package `asciidoc` +installed. + +Now that you've written your manpage, you'll need to build it explicitly. We +convert your AsciiDoc to troff which is man-readable like so: + +---- +$ make all doc +$ man Documentation/git-psuh.1 +---- + +or + +---- +$ make -C Documentation/ git-psuh.1 +$ man Documentation/git-psuh.1 +---- + +While this isn't as satisfying as running through `git help`, you can at least +check that your help page looks right. + +You can also check that the documentation coverage is good (that is, the project +sees that your command has been implemented as well as documented) by running +`make check-docs` from the top-level. + +Go ahead and commit your new documentation change. + +[[add-usage]] +=== Adding Usage Text + +Try and run `./bin-wrappers/git psuh -h`. Your command should crash at the end. +That's because `-h` is a special case which your command should handle by +printing usage. + +Take a look at `Documentation/technical/api-parse-options.txt`. This is a handy +tool for pulling out options you need to be able to handle, and it takes a +usage string. + +In order to use it, we'll need to prepare a NULL-terminated array of usage +strings and a `builtin_psuh_options` array. + +Add a line to `#include "parse-options.h"`. + +At global scope, add your array of usage strings: + +---- +static const char * const psuh_usage[] = { + N_("git psuh [...]"), + NULL, +}; +---- + +Then, within your `cmd_psuh()` implementation, we can declare and populate our +`option` struct. Ours is pretty boring but you can add more to it if you want to +explore `parse_options()` in more detail: + +---- + struct option options[] = { + OPT_END() + }; +---- + +Finally, before you print your args and prefix, add the call to +`parse-options()`: + +---- + argc = parse_options(argc, argv, prefix, options, psuh_usage, 0); +---- + +This call will modify your `argv` parameter. It will strip the options you +specified in `options` from `argv` and the locations pointed to from `options` +entries will be updated. Be sure to replace your `argc` with the result from +`parse_options()`, or you will be confused if you try to parse `argv` later. + +It's worth noting the special argument `--`. As you may be aware, many Unix +commands use `--` to indicate "end of named parameters" - all parameters after +the `--` are interpreted merely as positional arguments. (This can be handy if +you want to pass as a parameter something which would usually be interpreted as +a flag.) `parse_options()` will terminate parsing when it reaches `--` and give +you the rest of the options afterwards, untouched. + +Now that you have a usage hint, you can teach Git how to show it in the general +command list shown by `git help git` or `git help -a`, which is generated from +`command-list.txt`. Find the line for 'git-pull' so you can add your 'git-psuh' +line above it in alphabetical order. Now, we can add some attributes about the +command which impacts where it shows up in the aforementioned help commands. The +top of `command-list.txt` shares some information about what each attribute +means; in those help pages, the commands are sorted according to these +attributes. `git psuh` is user-facing, or porcelain - so we will mark it as +"mainporcelain". For "mainporcelain" commands, the comments at the top of +`command-list.txt` indicate we can also optionally add an attribute from another +list; since `git psuh` shows some information about the user's workspace but +doesn't modify anything, let's mark it as "info". Make sure to keep your +attributes in the same style as the rest of `command-list.txt` using spaces to +align and delineate them: + +---- +git-prune-packed plumbingmanipulators +git-psuh mainporcelain info +git-pull mainporcelain remote +git-push mainporcelain remote +---- + +Build again. Now, when you run with `-h`, you should see your usage printed and +your command terminated before anything else interesting happens. Great! + +Go ahead and commit this one, too. + +[[testing]] +== Testing + +It's important to test your code - even for a little toy command like this one. +Moreover, your patch won't be accepted into the Git tree without tests. Your +tests should: + +* Illustrate the current behavior of the feature +* Prove the current behavior matches the expected behavior +* Ensure the externally-visible behavior isn't broken in later changes + +So let's write some tests. + +Related reading: `t/README` + +[[overview-test-structure]] +=== Overview of Testing Structure + +The tests in Git live in `t/` and are named with a 4-digit decimal number using +the schema shown in the Naming Tests section of `t/README`. + +[[write-new-test]] +=== Writing Your Test + +Since this a toy command, let's go ahead and name the test with t9999. However, +as many of the family/subcmd combinations are full, best practice seems to be +to find a command close enough to the one you've added and share its naming +space. + +Create a new file `t/t9999-psuh-tutorial.sh`. Begin with the header as so (see +"Writing Tests" and "Source 'test-lib.sh'" in `t/README`): + +---- +#!/bin/sh + +test_description='git-psuh test + +This test runs git-psuh and makes sure it does not crash.' + +. ./test-lib.sh +---- + +Tests are framed inside of a `test_expect_success` in order to output TAP +formatted results. Let's make sure that `git psuh` doesn't exit poorly and does +mention the right animal somewhere: + +---- +test_expect_success 'runs correctly with no args and good output' ' + git psuh >actual && + grep Pony actual +' +---- + +Indicate that you've run everything you wanted by adding the following at the +bottom of your script: + +---- +test_done +---- + +Make sure you mark your test script executable: + +---- +$ chmod +x t/t9999-psuh-tutorial.sh +---- + +You can get an idea of whether you created your new test script successfully +by running `make -C t test-lint`, which will check for things like test number +uniqueness, executable bit, and so on. + +[[local-test]] +=== Running Locally + +Let's try and run locally: + +---- +$ make +$ cd t/ && prove t9999-psuh-tutorial.sh +---- + +You can run the full test suite and ensure `git-psuh` didn't break anything: + +---- +$ cd t/ +$ prove -j$(nproc) --shuffle t[0-9]*.sh +---- + +NOTE: You can also do this with `make test` or use any testing harness which can +speak TAP. `prove` can run concurrently. `shuffle` randomizes the order the +tests are run in, which makes them resilient against unwanted inter-test +dependencies. `prove` also makes the output nicer. + +Go ahead and commit this change, as well. + +[[ready-to-share]] +== Getting Ready to Share: Anatomy of a Patch Series + +You may have noticed already that the Git project performs its code reviews via +emailed patches, which are then applied by the maintainer when they are ready +and approved by the community. The Git project does not accept contributions from +pull requests, and the patches emailed for review need to be formatted a +specific way. + +:patch-series: https://lore.kernel.org/git/pull.1218.git.git.1645209647.gitgitgadget@gmail.com/ +:lore: https://lore.kernel.org/git/ + +Before taking a look at how to convert your commits into emailed patches, +let's analyze what the end result, a "patch series", looks like. Here is an +{patch-series}[example] of the summary view for a patch series on the web interface of +the {lore}[Git mailing list archive]: + +---- +2022-02-18 18:40 [PATCH 0/3] libify reflog John Cai via GitGitGadget +2022-02-18 18:40 ` [PATCH 1/3] reflog: libify delete reflog function and helpers John Cai via GitGitGadget +2022-02-18 19:10 ` Ævar Arnfjörð Bjarmason [this message] +2022-02-18 19:39 ` Taylor Blau +2022-02-18 19:48 ` Ævar Arnfjörð Bjarmason +2022-02-18 19:35 ` Taylor Blau +2022-02-21 1:43 ` John Cai +2022-02-21 1:50 ` Taylor Blau +2022-02-23 19:50 ` John Cai +2022-02-18 20:00 ` // other replies elided +2022-02-18 18:40 ` [PATCH 2/3] reflog: call reflog_delete from reflog.c John Cai via GitGitGadget +2022-02-18 19:15 ` Ævar Arnfjörð Bjarmason +2022-02-18 20:26 ` Junio C Hamano +2022-02-18 18:40 ` [PATCH 3/3] stash: call reflog_delete from reflog.c John Cai via GitGitGadget +2022-02-18 19:20 ` Ævar Arnfjörð Bjarmason +2022-02-19 0:21 ` Taylor Blau +2022-02-22 2:36 ` John Cai +2022-02-22 10:51 ` Ævar Arnfjörð Bjarmason +2022-02-18 19:29 ` [PATCH 0/3] libify reflog Ævar Arnfjörð Bjarmason +2022-02-22 18:30 ` [PATCH v2 0/3] libify reflog John Cai via GitGitGadget +2022-02-22 18:30 ` [PATCH v2 1/3] stash: add test to ensure reflog --rewrite --updatref behavior John Cai via GitGitGadget +2022-02-23 8:54 ` Ævar Arnfjörð Bjarmason +2022-02-23 21:27 ` Junio C Hamano +// continued +---- + +We can note a few things: + +- Each commit is sent as a separate email, with the commit message title as + subject, prefixed with "[PATCH _i_/_n_]" for the _i_-th commit of an + _n_-commit series. +- Each patch is sent as a reply to an introductory email called the _cover + letter_ of the series, prefixed "[PATCH 0/_n_]". +- Subsequent iterations of the patch series are labelled "PATCH v2", "PATCH + v3", etc. in place of "PATCH". For example, "[PATCH v2 1/3]" would be the first of + three patches in the second iteration. Each iteration is sent with a new cover + letter (like "[PATCH v2 0/3]" above), itself a reply to the cover letter of the + previous iteration (more on that below). + +NOTE: A single-patch topic is sent with "[PATCH]", "[PATCH v2]", etc. without +_i_/_n_ numbering (in the above thread overview, no single-patch topic appears, +though). + +[[cover-letter]] +=== The cover letter + +In addition to an email per patch, the Git community also expects your patches +to come with a cover letter. This is an important component of change +submission as it explains to the community from a high level what you're trying +to do, and why, in a way that's more apparent than just looking at your +patches. + +The title of your cover letter should be something which succinctly covers the +purpose of your entire topic branch. It's often in the imperative mood, just +like our commit message titles. Here is how we'll title our series: + +--- +Add the 'psuh' command +--- + +The body of the cover letter is used to give additional context to reviewers. +Be sure to explain anything your patches don't make clear on their own, but +remember that since the cover letter is not recorded in the commit history, +anything that might be useful to future readers of the repository's history +should also be in your commit messages. + +Here's an example body for `psuh`: + +---- +Our internal metrics indicate widespread interest in the command +git-psuh - that is, many users are trying to use it, but finding it is +unavailable, using some unknown workaround instead. + +The following handful of patches add the psuh command and implement some +handy features on top of it. + +This patchset is part of the MyFirstContribution tutorial and should not +be merged. +---- + +At this point the tutorial diverges, in order to demonstrate two +different methods of formatting your patchset and getting it reviewed. + +The first method to be covered is GitGitGadget, which is useful for those +already familiar with GitHub's common pull request workflow. This method +requires a GitHub account. + +The second method to be covered is `git send-email`, which can give slightly +more fine-grained control over the emails to be sent. This method requires some +setup which can change depending on your system and will not be covered in this +tutorial. + +Regardless of which method you choose, your engagement with reviewers will be +the same; the review process will be covered after the sections on GitGitGadget +and `git send-email`. + +[[howto-ggg]] +== Sending Patches via GitGitGadget + +One option for sending patches is to follow a typical pull request workflow and +send your patches out via GitGitGadget. GitGitGadget is a tool created by +Johannes Schindelin to make life as a Git contributor easier for those used to +the GitHub PR workflow. It allows contributors to open pull requests against its +mirror of the Git project, and does some magic to turn the PR into a set of +emails and send them out for you. It also runs the Git continuous integration +suite for you. It's documented at https://gitgitgadget.github.io/. + +[[create-fork]] +=== Forking `git/git` on GitHub + +Before you can send your patch off to be reviewed using GitGitGadget, you will +need to fork the Git project and upload your changes. First thing - make sure +you have a GitHub account. + +Head to the https://github.com/git/git[GitHub mirror] and look for the Fork +button. Place your fork wherever you deem appropriate and create it. + +[[upload-to-fork]] +=== Uploading to Your Own Fork + +To upload your branch to your own fork, you'll need to add the new fork as a +remote. You can use `git remote -v` to show the remotes you have added already. +From your new fork's page on GitHub, you can press "Clone or download" to get +the URL; then you need to run the following to add, replacing your own URL and +remote name for the examples provided: + +---- +$ git remote add remotename git@github.com:remotename/git.git +---- + +or to use the HTTPS URL: + +---- +$ git remote add remotename https://github.com/remotename/git/.git +---- + +Run `git remote -v` again and you should see the new remote showing up. +`git fetch remotename` (with the real name of your remote replaced) in order to +get ready to push. + +Next, double-check that you've been doing all your development in a new branch +by running `git branch`. If you didn't, now is a good time to move your new +commits to their own branch. + +As mentioned briefly at the beginning of this document, we are basing our work +on `master`, so go ahead and update as shown below, or using your preferred +workflow. + +---- +$ git checkout master +$ git pull -r +$ git rebase master psuh +---- + +Finally, you're ready to push your new topic branch! (Due to our branch and +command name choices, be careful when you type the command below.) + +---- +$ git push remotename psuh +---- + +Now you should be able to go and check out your newly created branch on GitHub. + +[[send-pr-ggg]] +=== Sending a PR to GitGitGadget + +In order to have your code tested and formatted for review, you need to start by +opening a Pull Request against `gitgitgadget/git`. Head to +https://github.com/gitgitgadget/git and open a PR either with the "New pull +request" button or the convenient "Compare & pull request" button that may +appear with the name of your newly pushed branch. + +Review the PR's title and description, as they're used by GitGitGadget +respectively as the subject and body of the cover letter for your change. Refer +to <> above for advice on how to title your +submission and what content to include in the description. + +NOTE: For single-patch contributions, your commit message should already be +meaningful and explain at a high level the purpose (what is happening and why) +of your patch, so you usually do not need any additional context. In that case, +remove the PR description that GitHub automatically generates from your commit +message (your PR description should be empty). If you do need to supply even +more context, you can do so in that space and it will be appended to the email +that GitGitGadget will send, between the three-dash line and the diffstat +(see <> for how this looks once +submitted). + +When you're happy, submit your pull request. + +[[run-ci-ggg]] +=== Running CI and Getting Ready to Send + +If it's your first time using GitGitGadget (which is likely, as you're using +this tutorial) then someone will need to give you permission to use the tool. +As mentioned in the GitGitGadget documentation, you just need someone who +already uses it to comment on your PR with `/allow `. GitGitGadget +will automatically run your PRs through the CI even without the permission given +but you will not be able to `/submit` your changes until someone allows you to +use the tool. + +NOTE: You can typically find someone who can `/allow` you on GitGitGadget by +either examining recent pull requests where someone has been granted `/allow` +(https://github.com/gitgitgadget/git/pulls?utf8=%E2%9C%93&q=is%3Apr+is%3Aopen+%22%2Fallow%22[Search: +is:pr is:open "/allow"]), in which case both the author and the person who +granted the `/allow` can now `/allow` you, or by inquiring on the +https://web.libera.chat/#git-devel[#git-devel] IRC channel on Libera Chat +linking your pull request and asking for someone to `/allow` you. + +If the CI fails, you can update your changes with `git rebase -i` and push your +branch again: + +---- +$ git push -f remotename psuh +---- + +In fact, you should continue to make changes this way up until the point when +your patch is accepted into `next`. + +//// +TODO https://github.com/gitgitgadget/gitgitgadget/issues/83 +It'd be nice to be able to verify that the patch looks good before sending it +to everyone on Git mailing list. +[[check-work-ggg]] +=== Check Your Work +//// + +[[send-mail-ggg]] +=== Sending Your Patches + +Now that your CI is passing and someone has granted you permission to use +GitGitGadget with the `/allow` command, sending out for review is as simple as +commenting on your PR with `/submit`. + +[[responding-ggg]] +=== Updating With Comments + +Skip ahead to <> for information on how to +reply to review comments you will receive on the mailing list. + +Once you have your branch again in the shape you want following all review +comments, you can submit again: + +---- +$ git push -f remotename psuh +---- + +Next, go look at your pull request against GitGitGadget; you should see the CI +has been kicked off again. Now while the CI is running is a good time for you +to modify your description at the top of the pull request thread; it will be +used again as the cover letter. You should use this space to describe what +has changed since your previous version, so that your reviewers have some idea +of what they're looking at. When the CI is done running, you can comment once +more with `/submit` - GitGitGadget will automatically add a v2 mark to your +changes. + +[[howto-git-send-email]] +== Sending Patches with `git send-email` + +If you don't want to use GitGitGadget, you can also use Git itself to mail your +patches. Some benefits of using Git this way include finer grained control of +subject line (for example, being able to use the tag [RFC PATCH] in the subject) +and being able to send a ``dry run'' mail to yourself to ensure it all looks +good before going out to the list. + +[[setup-git-send-email]] +=== Prerequisite: Setting Up `git send-email` + +Configuration for `send-email` can vary based on your operating system and email +provider, and so will not be covered in this tutorial, beyond stating that in +many distributions of Linux, `git-send-email` is not packaged alongside the +typical `git` install. You may need to install this additional package; there +are a number of resources online to help you do so. You will also need to +determine the right way to configure it to use your SMTP server; again, as this +configuration can change significantly based on your system and email setup, it +is out of scope for the context of this tutorial. + +[[format-patch]] +=== Preparing Initial Patchset + +Sending emails with Git is a two-part process; before you can prepare the emails +themselves, you'll need to prepare the patches. Luckily, this is pretty simple: + +---- +$ git format-patch --cover-letter -o psuh/ --base=auto psuh@{u}..psuh +---- + + . The `--cover-letter` option tells `format-patch` to create a + cover letter template for you. You will need to fill in the + template before you're ready to send - but for now, the template + will be next to your other patches. + + . The `-o psuh/` option tells `format-patch` to place the patch + files into a directory. This is useful because `git send-email` + can take a directory and send out all the patches from there. + + . The `--base=auto` option tells the command to record the "base + commit", on which the recipient is expected to apply the patch + series. The `auto` value will cause `format-patch` to compute + the base commit automatically, which is the merge base of tip + commit of the remote-tracking branch and the specified revision + range. + + . The `psuh@{u}..psuh` option tells `format-patch` to generate + patches for the commits you created on the `psuh` branch since it + forked from its upstream (which is `origin/master` if you + followed the example in the "Set up your workspace" section). If + you are already on the `psuh` branch, you can just say `@{u}`, + which means "commits on the current branch since it forked from + its upstream", which is the same thing. + +The command will make one patch file per commit. After you +run, you can go have a look at each of the patches with your favorite text +editor and make sure everything looks alright; however, it's not recommended to +make code fixups via the patch file. It's a better idea to make the change the +normal way using `git rebase -i` or by adding a new commit than by modifying a +patch. + +NOTE: Optionally, you can also use the `--rfc` flag to prefix your patch subject +with ``[RFC PATCH]'' instead of ``[PATCH]''. RFC stands for ``request for +comments'' and indicates that while your code isn't quite ready for submission, +you'd like to begin the code review process. This can also be used when your +patch is a proposal, but you aren't sure whether the community wants to solve +the problem with that approach or not - to conduct a sort of design review. You +may also see on the list patches marked ``WIP'' - this means they are incomplete +but want reviewers to look at what they have so far. You can add this flag with +`--subject-prefix=WIP`. + +Check and make sure that your patches and cover letter template exist in the +directory you specified - you're nearly ready to send out your review! + +[[preparing-cover-letter]] +=== Preparing Email + +Since you invoked `format-patch` with `--cover-letter`, you've already got a +cover letter template ready. Open it up in your favorite editor. + +You should see a number of headers present already. Check that your `From:` +header is correct. Then modify your `Subject:` (see <> for +how to choose good title for your patch series): + +---- +Subject: [PATCH 0/7] Add the 'psuh' command +---- + +Make sure you retain the ``[PATCH 0/X]'' part; that's what indicates to the Git +community that this email is the beginning of a patch series, and many +reviewers filter their email for this type of flag. + +You'll need to add some extra parameters when you invoke `git send-email` to add +the cover letter. + +Next you'll have to fill out the body of your cover letter. Again, see +<> for what content to include. + +The template created by `git format-patch --cover-letter` includes a diffstat. +This gives reviewers a summary of what they're in for when reviewing your topic. +The one generated for `psuh` from the sample implementation looks like this: + +---- + Documentation/git-psuh.txt | 40 +++++++++++++++++++++ + Makefile | 1 + + builtin.h | 1 + + builtin/psuh.c | 73 ++++++++++++++++++++++++++++++++++++++ + git.c | 1 + + t/t9999-psuh-tutorial.sh | 12 +++++++ + 6 files changed, 128 insertions(+) + create mode 100644 Documentation/git-psuh.txt + create mode 100644 builtin/psuh.c + create mode 100755 t/t9999-psuh-tutorial.sh +---- + +Finally, the letter will include the version of Git used to generate the +patches. You can leave that string alone. + +[[sending-git-send-email]] +=== Sending Email + +At this point you should have a directory `psuh/` which is filled with your +patches and a cover letter. Time to mail it out! You can send it like this: + +---- +$ git send-email --to=target@example.com psuh/*.patch +---- + +NOTE: Check `git help send-email` for some other options which you may find +valuable, such as changing the Reply-to address or adding more CC and BCC lines. + +:contrib-scripts: footnoteref:[contrib-scripts,Scripts under `contrib/` are + +not part of the core `git` binary and must be called directly. Clone the Git + +codebase and run `perl contrib/contacts/git-contacts`.] + +NOTE: If you're not sure whom to CC, running `contrib/contacts/git-contacts` can +list potential reviewers. In addition, you can do `git send-email +--cc-cmd='perl contrib/contacts/git-contacts' feature/*.patch`{contrib-scripts} to +automatically pass this list of emails to `send-email`. + +NOTE: When you are sending a real patch, it will go to git@vger.kernel.org - but +please don't send your patchset from the tutorial to the real mailing list! For +now, you can send it to yourself, to make sure you understand how it will look. + +After you run the command above, you will be presented with an interactive +prompt for each patch that's about to go out. This gives you one last chance to +edit or quit sending something (but again, don't edit code this way). Once you +press `y` or `a` at these prompts your emails will be sent! Congratulations! + +Awesome, now the community will drop everything and review your changes. (Just +kidding - be patient!) + +[[v2-git-send-email]] +=== Sending v2 + +This section will focus on how to send a v2 of your patchset. To learn what +should go into v2, skip ahead to <> for +information on how to handle comments from reviewers. + +We'll reuse our `psuh` topic branch for v2. Before we make any changes, we'll +mark the tip of our v1 branch for easy reference: + +---- +$ git checkout psuh +$ git branch psuh-v1 +---- + +Refine your patch series by using `git rebase -i` to adjust commits based upon +reviewer comments. Once the patch series is ready for submission, generate your +patches again, but with some new flags: + +---- +$ git format-patch -v2 --cover-letter -o psuh/ --range-diff master..psuh-v1 master.. +---- + +The `--range-diff master..psuh-v1` parameter tells `format-patch` to include a +range-diff between `psuh-v1` and `psuh` in the cover letter (see +linkgit:git-range-diff[1]). This helps tell reviewers about the differences +between your v1 and v2 patches. + +The `-v2` parameter tells `format-patch` to output your patches +as version "2". For instance, you may notice that your v2 patches are +all named like `v2-000n-my-commit-subject.patch`. `-v2` will also format +your patches by prefixing them with "[PATCH v2]" instead of "[PATCH]", +and your range-diff will be prefaced with "Range-diff against v1". + +After you run this command, `format-patch` will output the patches to the `psuh/` +directory, alongside the v1 patches. Using a single directory makes it easy to +refer to the old v1 patches while proofreading the v2 patches, but you will need +to be careful to send out only the v2 patches. We will use a pattern like +`psuh/v2-*.patch` (not `psuh/*.patch`, which would match v1 and v2 patches). + +Edit your cover letter again. Now is a good time to mention what's different +between your last version and now, if it's something significant. You do not +need the exact same body in your second cover letter; focus on explaining to +reviewers the changes you've made that may not be as visible. + +You will also need to go and find the Message-ID of your previous cover letter. +You can either note it when you send the first series, from the output of `git +send-email`, or you can look it up on the +https://lore.kernel.org/git[mailing list]. Find your cover letter in the +archives, click on it, then click "permalink" or "raw" to reveal the Message-ID +header. It should match: + +---- +Message-ID: +---- + +Your Message-ID is ``. This example will be used +below as well; make sure to replace it with the correct Message-ID for your +**previous cover letter** - that is, if you're sending v2, use the Message-ID +from v1; if you're sending v3, use the Message-ID from v2. + +While you're looking at the email, you should also note who is CC'd, as it's +common practice in the mailing list to keep all CCs on a thread. You can add +these CC lines directly to your cover letter with a line like so in the header +(before the Subject line): + +---- +CC: author@example.com, Othe R +---- + +Now send the emails again, paying close attention to which messages you pass in +to the command: + +---- +$ git send-email --to=target@example.com + --in-reply-to="" + psuh/v2-*.patch +---- + +[[single-patch]] +=== Bonus Chapter: One-Patch Changes + +In some cases, your very small change may consist of only one patch. When that +happens, you only need to send one email. Your commit message should already be +meaningful and explain at a high level the purpose (what is happening and why) +of your patch, but if you need to supply even more context, you can do so below +the `---` in your patch. Take the example below, which was generated with `git +format-patch` on a single commit, and then edited to add the content between +the `---` and the diffstat. + +---- +From 1345bbb3f7ac74abde040c12e737204689a72723 Mon Sep 17 00:00:00 2001 +From: A U Thor +Date: Thu, 18 Apr 2019 15:11:02 -0700 +Subject: [PATCH] README: change the grammar + +I think it looks better this way. This part of the commit message will +end up in the commit-log. + +Signed-off-by: A U Thor +--- +Let's have a wild discussion about grammar on the mailing list. This +part of my email will never end up in the commit log. Here is where I +can add additional context to the mailing list about my intent, outside +of the context of the commit log. This section was added after `git +format-patch` was run, by editing the patch file in a text editor. + + README.md | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/README.md b/README.md +index 88f126184c..38da593a60 100644 +--- a/README.md ++++ b/README.md +@@ -3,7 +3,7 @@ + Git - fast, scalable, distributed revision control system + ========================================================= + +-Git is a fast, scalable, distributed revision control system with an ++Git is a fast, scalable, and distributed revision control system with an + unusually rich command set that provides both high-level operations + and full access to internals. + +-- +2.21.0.392.gf8f6787159e-goog +---- + +[[now-what]] +== My Patch Got Emailed - Now What? + +Please give reviewers enough time to process your initial patch before +sending an updated version. That is, resist the temptation to send a new +version immediately, because others may have already started reviewing +your initial version. + +While waiting for review comments, you may find mistakes in your initial +patch, or perhaps realize a different and better way to achieve the goal +of the patch. In this case you may communicate your findings to other +reviewers as follows: + + - If the mistakes you found are minor, send a reply to your patch as if + you were a reviewer and mention that you will fix them in an + updated version. + + - On the other hand, if you think you want to change the course so + drastically that reviews on the initial patch would be a waste of + time (for everyone involved), retract the patch immediately with + a reply like "I am working on a much better approach, so please + ignore this patch and wait for the updated version." + +Now, the above is a good practice if you sent your initial patch +prematurely without polish. But a better approach of course is to avoid +sending your patch prematurely in the first place. + +Please be considerate of the time needed by reviewers to examine each +new version of your patch. Rather than seeing the initial version right +now (followed by several "oops, I like this version better than the +previous one" patches over 2 days), reviewers would strongly prefer if a +single polished version came 2 days later instead, and that version with +fewer mistakes were the only one they would need to review. + + +[[reviewing]] +=== Responding to Reviews + +After a few days, you will hopefully receive a reply to your patchset with some +comments. Woohoo! Now you can get back to work. + +It's good manners to reply to each comment, notifying the reviewer that you have +made the change suggested, feel the original is better, or that the comment +inspired you to do something a new way which is superior to both the original +and the suggested change. This way reviewers don't need to inspect your v2 to +figure out whether you implemented their comment or not. + +Reviewers may ask you about what you wrote in the patchset, either in +the proposed commit log message or in the changes themselves. You +should answer these questions in your response messages, but often the +reason why reviewers asked these questions to understand what you meant +to write is because your patchset needed clarification to be understood. + +Do not be satisfied by just answering their questions in your response +and hear them say that they now understand what you wanted to say. +Update your patches to clarify the points reviewers had trouble with, +and prepare your v2; the words you used to explain your v1 to answer +reviewers' questions may be useful thing to use. Your goal is to make +your v2 clear enough so that it becomes unnecessary for you to give the +same explanation to the next person who reads it. + +If you are going to push back on a comment, be polite and explain why you feel +your original is better; be prepared that the reviewer may still disagree with +you, and the rest of the community may weigh in on one side or the other. As +with all code reviews, it's important to keep an open mind to doing something a +different way than you originally planned; other reviewers have a different +perspective on the project than you do, and may be thinking of a valid side +effect which had not occurred to you. It is always okay to ask for clarification +if you aren't sure why a change was suggested, or what the reviewer is asking +you to do. + +Make sure your email client has a plaintext email mode and it is turned on; the +Git list rejects HTML email. Please also follow the mailing list etiquette +outlined in the +https://kernel.googlesource.com/pub/scm/git/git/+/todo/MaintNotes[Maintainer's +Note], which are similar to etiquette rules in most open source communities +surrounding bottom-posting and inline replies. + +When you're making changes to your code, it is cleanest - that is, the resulting +commits are easiest to look at - if you use `git rebase -i` (interactive +rebase). Take a look at this +https://www.oreilly.com/library/view/git-pocket-guide/9781449327507/ch10.html[overview] +from O'Reilly. The general idea is to modify each commit which requires changes; +this way, instead of having a patch A with a mistake, a patch B which was fine +and required no upstream reviews in v1, and a patch C which fixes patch A for +v2, you can just ship a v2 with a correct patch A and correct patch B. This is +changing history, but since it's local history which you haven't shared with +anyone, that is okay for now! (Later, it may not make sense to do this; take a +look at the section below this one for some context.) + +[[after-approval]] +=== After Review Approval + +The Git project has four integration branches: `seen`, `next`, `master`, and +`maint`. Your change will be placed into `seen` fairly early on by the maintainer +while it is still in the review process; from there, when it is ready for wider +testing, it will be merged into `next`. Plenty of early testers use `next` and +may report issues. Eventually, changes in `next` will make it to `master`, +which is typically considered stable. Finally, when a new release is cut, +`maint` is used to base bugfixes onto. As mentioned at the beginning of this +document, you can read `Documents/SubmittingPatches` for some more info about +the use of the various integration branches. + +Back to now: your code has been lauded by the upstream reviewers. It is perfect. +It is ready to be accepted. You don't need to do anything else; the maintainer +will merge your topic branch to `next` and life is good. + +However, if you discover it isn't so perfect after this point, you may need to +take some special steps depending on where you are in the process. + +If the maintainer has announced in the "What's cooking in git.git" email that +your topic is marked for `next` - that is, that they plan to merge it to `next` +but have not yet done so - you should send an email asking the maintainer to +wait a little longer: "I've sent v4 of my series and you marked it for `next`, +but I need to change this and that - please wait for v5 before you merge it." + +If the topic has already been merged to `next`, rather than modifying your +patches with `git rebase -i`, you should make further changes incrementally - +that is, with another commit, based on top of the maintainer's topic branch as +detailed in https://github.com/gitster/git. Your work is still in the same topic +but is now incremental, rather than a wholesale rewrite of the topic branch. + +The topic branches in the maintainer's GitHub are mirrored in GitGitGadget, so +if you're sending your reviews out that way, you should be sure to open your PR +against the appropriate GitGitGadget/Git branch. + +If you're using `git send-email`, you can use it the same way as before, but you +should generate your diffs from `..` and base your work on +`` instead of `master`. diff --git a/Documentation/MyFirstObjectWalk.adoc b/Documentation/MyFirstObjectWalk.adoc new file mode 100644 index 0000000000..dec8afe5b1 --- /dev/null +++ b/Documentation/MyFirstObjectWalk.adoc @@ -0,0 +1,898 @@ += My First Object Walk + +== What's an Object Walk? + +The object walk is a key concept in Git - this is the process that underpins +operations like object transfer and fsck. Beginning from a given commit, the +list of objects is found by walking parent relationships between commits (commit +X based on commit W) and containment relationships between objects (tree Y is +contained within commit X, and blob Z is located within tree Y, giving our +working tree for commit X something like `y/z.txt`). + +A related concept is the revision walk, which is focused on commit objects and +their parent relationships and does not delve into other object types. The +revision walk is used for operations like `git log`. + +=== Related Reading + +- `Documentation/user-manual.txt` under "Hacking Git" contains some coverage of + the revision walker in its various incarnations. +- `revision.h` +- https://eagain.net/articles/git-for-computer-scientists/[Git for Computer Scientists] + gives a good overview of the types of objects in Git and what your object + walk is really describing. + +== Setting Up + +Create a new branch from `master`. + +---- +git checkout -b revwalk origin/master +---- + +We'll put our fiddling into a new command. For fun, let's name it `git walken`. +Open up a new file `builtin/walken.c` and set up the command handler: + +---- +/* + * "git walken" + * + * Part of the "My First Object Walk" tutorial. + */ + +#include "builtin.h" +#include "trace.h" + +int cmd_walken(int argc, const char **argv, const char *prefix) +{ + trace_printf(_("cmd_walken incoming...\n")); + return 0; +} +---- + +NOTE: `trace_printf()`, defined in `trace.h`, differs from `printf()` in +that it can be turned on or off at runtime. For the purposes of this +tutorial, we will write `walken` as though it is intended for use as +a "plumbing" command: that is, a command which is used primarily in +scripts, rather than interactively by humans (a "porcelain" command). +So we will send our debug output to `trace_printf()` instead. +When running, enable trace output by setting the environment variable `GIT_TRACE`. + +Add usage text and `-h` handling, like all subcommands should consistently do +(our test suite will notice and complain if you fail to do so). +We'll need to include the `parse-options.h` header. + +---- +#include "parse-options.h" + +... + +int cmd_walken(int argc, const char **argv, const char *prefix) +{ + const char * const walken_usage[] = { + N_("git walken"), + NULL, + }; + struct option options[] = { + OPT_END() + }; + + argc = parse_options(argc, argv, prefix, options, walken_usage, 0); + + ... +} +---- + +Also add the relevant line in `builtin.h` near `cmd_whatchanged()`: + +---- +int cmd_walken(int argc, const char **argv, const char *prefix); +---- + +Include the command in `git.c` in `commands[]` near the entry for `whatchanged`, +maintaining alphabetical ordering: + +---- +{ "walken", cmd_walken, RUN_SETUP }, +---- + +Add it to the `Makefile` near the line for `builtin/worktree.o`: + +---- +BUILTIN_OBJS += builtin/walken.o +---- + +Build and test out your command, without forgetting to ensure the `DEVELOPER` +flag is set, and with `GIT_TRACE` enabled so the debug output can be seen: + +---- +$ echo DEVELOPER=1 >>config.mak +$ make +$ GIT_TRACE=1 ./bin-wrappers/git walken +---- + +NOTE: For a more exhaustive overview of the new command process, take a look at +`Documentation/MyFirstContribution.txt`. + +NOTE: A reference implementation can be found at +https://github.com/nasamuffin/git/tree/revwalk. + +=== `struct rev_cmdline_info` + +The definition of `struct rev_cmdline_info` can be found in `revision.h`. + +This struct is contained within the `rev_info` struct and is used to reflect +parameters provided by the user over the CLI. + +`nr` represents the number of `rev_cmdline_entry` present in the array. + +`alloc` is used by the `ALLOC_GROW` macro. Check `alloc.h` - this variable is +used to track the allocated size of the list. + +Per entry, we find: + +`item` is the object provided upon which to base the object walk. Items in Git +can be blobs, trees, commits, or tags. (See `Documentation/gittutorial-2.txt`.) + +`name` is the object ID (OID) of the object - a hex string you may be familiar +with from using Git to organize your source in the past. Check the tutorial +mentioned above towards the top for a discussion of where the OID can come +from. + +`whence` indicates some information about what to do with the parents of the +specified object. We'll explore this flag more later on; take a look at +`Documentation/revisions.txt` to get an idea of what could set the `whence` +value. + +`flags` are used to hint the beginning of the revision walk and are the first +block under the `#include`s in `revision.h`. The most likely ones to be set in +the `rev_cmdline_info` are `UNINTERESTING` and `BOTTOM`, but these same flags +can be used during the walk, as well. + +=== `struct rev_info` + +This one is quite a bit longer, and many fields are only used during the walk +by `revision.c` - not configuration options. Most of the configurable flags in +`struct rev_info` have a mirror in `Documentation/rev-list-options.txt`. It's a +good idea to take some time and read through that document. + +== Basic Commit Walk + +First, let's see if we can replicate the output of `git log --oneline`. We'll +refer back to the implementation frequently to discover norms when performing +an object walk of our own. + +To do so, we'll first find all the commits, in order, which preceded the current +commit. We'll extract the name and subject of the commit from each. + +Ideally, we will also be able to find out which ones are currently at the tip of +various branches. + +=== Setting Up + +Preparing for your object walk has some distinct stages. + +1. Perform default setup for this mode, and others which may be invoked. +2. Check configuration files for relevant settings. +3. Set up the `rev_info` struct. +4. Tweak the initialized `rev_info` to suit the current walk. +5. Prepare the `rev_info` for the walk. +6. Iterate over the objects, processing each one. + +==== Default Setups + +Before examining configuration files which may modify command behavior, set up +default state for switches or options your command may have. If your command +utilizes other Git components, ask them to set up their default states as well. +For instance, `git log` takes advantage of `grep` and `diff` functionality, so +its `init_log_defaults()` sets its own state (`decoration_style`) and asks +`grep` and `diff` to initialize themselves by calling each of their +initialization functions. + +==== Configuring From `.gitconfig` + +Next, we should have a look at any relevant configuration settings (i.e., +settings readable and settable from `git config`). This is done by providing a +callback to `git_config()`; within that callback, you can also invoke methods +from other components you may need that need to intercept these options. Your +callback will be invoked once per each configuration value which Git knows about +(global, local, worktree, etc.). + +Similarly to the default values, we don't have anything to do here yet +ourselves; however, we should call `git_default_config()` if we aren't calling +any other existing config callbacks. + +Add a new function to `builtin/walken.c`. +We'll also need to include the `config.h` header: + +---- +#include "config.h" + +... + +static int git_walken_config(const char *var, const char *value, + const struct config_context *ctx, void *cb) +{ + /* + * For now, we don't have any custom configuration, so fall back to + * the default config. + */ + return git_default_config(var, value, ctx, cb); +} +---- + +Make sure to invoke `git_config()` with it in your `cmd_walken()`: + +---- +int cmd_walken(int argc, const char **argv, const char *prefix) +{ + ... + + git_config(git_walken_config, NULL); + + ... +} +---- + +==== Setting Up `rev_info` + +Now that we've gathered external configuration and options, it's time to +initialize the `rev_info` object which we will use to perform the walk. This is +typically done by calling `repo_init_revisions()` with the repository you intend +to target, as well as the `prefix` argument of `cmd_walken` and your `rev_info` +struct. + +Add the `struct rev_info` and the `repo_init_revisions()` call. +We'll also need to include the `revision.h` header: + +---- +#include "revision.h" + +... + +int cmd_walken(int argc, const char **argv, const char *prefix) +{ + /* This can go wherever you like in your declarations.*/ + struct rev_info rev; + ... + + /* This should go after the git_config() call. */ + repo_init_revisions(the_repository, &rev, prefix); + + ... +} +---- + +==== Tweaking `rev_info` For the Walk + +We're getting close, but we're still not quite ready to go. Now that `rev` is +initialized, we can modify it to fit our needs. This is usually done within a +helper for clarity, so let's add one: + +---- +static void final_rev_info_setup(struct rev_info *rev) +{ + /* + * We want to mimic the appearance of `git log --oneline`, so let's + * force oneline format. + */ + get_commit_format("oneline", rev); + + /* Start our object walk at HEAD. */ + add_head_to_pending(rev); +} +---- + +[NOTE] +==== +Instead of using the shorthand `add_head_to_pending()`, you could do +something like this: +---- + struct setup_revision_opt opt; + + memset(&opt, 0, sizeof(opt)); + opt.def = "HEAD"; + opt.revarg_opt = REVARG_COMMITTISH; + setup_revisions(argc, argv, rev, &opt); +---- +Using a `setup_revision_opt` gives you finer control over your walk's starting +point. +==== + +Then let's invoke `final_rev_info_setup()` after the call to +`repo_init_revisions()`: + +---- +int cmd_walken(int argc, const char **argv, const char *prefix) +{ + ... + + final_rev_info_setup(&rev); + + ... +} +---- + +Later, we may wish to add more arguments to `final_rev_info_setup()`. But for +now, this is all we need. + +==== Preparing `rev_info` For the Walk + +Now that `rev` is all initialized and configured, we've got one more setup step +before we get rolling. We can do this in a helper, which will both prepare the +`rev_info` for the walk, and perform the walk itself. Let's start the helper +with the call to `prepare_revision_walk()`, which can return an error without +dying on its own: + +---- +static void walken_commit_walk(struct rev_info *rev) +{ + if (prepare_revision_walk(rev)) + die(_("revision walk setup failed")); +} +---- + +NOTE: `die()` prints to `stderr` and exits the program. Since it will print to +`stderr` it's likely to be seen by a human, so we will localize it. + +==== Performing the Walk! + +Finally! We are ready to begin the walk itself. Now we can see that `rev_info` +can also be used as an iterator; we move to the next item in the walk by using +`get_revision()` repeatedly. Add the listed variable declarations at the top and +the walk loop below the `prepare_revision_walk()` call within your +`walken_commit_walk()`: + +---- +#include "pretty.h" + +... + +static void walken_commit_walk(struct rev_info *rev) +{ + struct commit *commit; + struct strbuf prettybuf = STRBUF_INIT; + + ... + + while ((commit = get_revision(rev))) { + strbuf_reset(&prettybuf); + pp_commit_easy(CMIT_FMT_ONELINE, commit, &prettybuf); + puts(prettybuf.buf); + } + strbuf_release(&prettybuf); +} +---- + +NOTE: `puts()` prints a `char*` to `stdout`. Since this is the part of the +command we expect to be machine-parsed, we're sending it directly to stdout. + +Give it a shot. + +---- +$ make +$ ./bin-wrappers/git walken +---- + +You should see all of the subject lines of all the commits in +your tree's history, in order, ending with the initial commit, "Initial revision +of "git", the information manager from hell". Congratulations! You've written +your first revision walk. You can play with printing some additional fields +from each commit if you're curious; have a look at the functions available in +`commit.h`. + +=== Adding a Filter + +Next, let's try to filter the commits we see based on their author. This is +equivalent to running `git log --author=`. We can add a filter by +modifying `rev_info.grep_filter`, which is a `struct grep_opt`. + +First some setup. Add `grep_config()` to `git_walken_config()`: + +---- +static int git_walken_config(const char *var, const char *value, + const struct config_context *ctx, void *cb) +{ + grep_config(var, value, ctx, cb); + return git_default_config(var, value, ctx, cb); +} +---- + +Next, we can modify the `grep_filter`. This is done with convenience functions +found in `grep.h`. For fun, we're filtering to only commits from folks using a +`gmail.com` email address - a not-very-precise guess at who may be working on +Git as a hobby. Since we're checking the author, which is a specific line in the +header, we'll use the `append_header_grep_pattern()` helper. We can use +the `enum grep_header_field` to indicate which part of the commit header we want +to search. + +In `final_rev_info_setup()`, add your filter line: + +---- +static void final_rev_info_setup(int argc, const char **argv, + const char *prefix, struct rev_info *rev) +{ + ... + + append_header_grep_pattern(&rev->grep_filter, GREP_HEADER_AUTHOR, + "gmail"); + compile_grep_patterns(&rev->grep_filter); + + ... +} +---- + +`append_header_grep_pattern()` adds your new "gmail" pattern to `rev_info`, but +it won't work unless we compile it with `compile_grep_patterns()`. + +NOTE: If you are using `setup_revisions()` (for example, if you are passing a +`setup_revision_opt` instead of using `add_head_to_pending()`), you don't need +to call `compile_grep_patterns()` because `setup_revisions()` calls it for you. + +NOTE: We could add the same filter via the `append_grep_pattern()` helper if we +wanted to, but `append_header_grep_pattern()` adds the `enum grep_context` and +`enum grep_pat_token` for us. + +=== Changing the Order + +There are a few ways that we can change the order of the commits during a +revision walk. Firstly, we can use the `enum rev_sort_order` to choose from some +typical orderings. + +`topo_order` is the same as `git log --topo-order`: we avoid showing a parent +before all of its children have been shown, and we avoid mixing commits which +are in different lines of history. (`git help log`'s section on `--topo-order` +has a very nice diagram to illustrate this.) + +Let's see what happens when we run with `REV_SORT_BY_COMMIT_DATE` as opposed to +`REV_SORT_BY_AUTHOR_DATE`. Add the following: + +---- +static void final_rev_info_setup(int argc, const char **argv, + const char *prefix, struct rev_info *rev) +{ + ... + + rev->topo_order = 1; + rev->sort_order = REV_SORT_BY_COMMIT_DATE; + + ... +} +---- + +Let's output this into a file so we can easily diff it with the walk sorted by +author date. + +---- +$ make +$ ./bin-wrappers/git walken > commit-date.txt +---- + +Then, let's sort by author date and run it again. + +---- +static void final_rev_info_setup(int argc, const char **argv, + const char *prefix, struct rev_info *rev) +{ + ... + + rev->topo_order = 1; + rev->sort_order = REV_SORT_BY_AUTHOR_DATE; + + ... +} +---- + +---- +$ make +$ ./bin-wrappers/git walken > author-date.txt +---- + +Finally, compare the two. This is a little less helpful without object names or +dates, but hopefully we get the idea. + +---- +$ diff -u commit-date.txt author-date.txt +---- + +This display indicates that commits can be reordered after they're written, for +example with `git rebase`. + +Let's try one more reordering of commits. `rev_info` exposes a `reverse` flag. +Set that flag somewhere inside of `final_rev_info_setup()`: + +---- +static void final_rev_info_setup(int argc, const char **argv, const char *prefix, + struct rev_info *rev) +{ + ... + + rev->reverse = 1; + + ... +} +---- + +Run your walk again and note the difference in order. (If you remove the grep +pattern, you should see the last commit this call gives you as your current +HEAD.) + +== Basic Object Walk + +So far we've been walking only commits. But Git has more types of objects than +that! Let's see if we can walk _all_ objects, and find out some information +about each one. + +We can base our work on an example. `git pack-objects` prepares all kinds of +objects for packing into a bitmap or packfile. The work we are interested in +resides in `builtin/pack-objects.c:get_object_list()`; examination of that +function shows that the all-object walk is being performed by +`traverse_commit_list()` or `traverse_commit_list_filtered()`. Those two +functions reside in `list-objects.c`; examining the source shows that, despite +the name, these functions traverse all kinds of objects. Let's have a look at +the arguments to `traverse_commit_list()`. + +- `struct rev_info *revs`: This is the `rev_info` used for the walk. If + its `filter` member is not `NULL`, then `filter` contains information for + how to filter the object list. +- `show_commit_fn show_commit`: A callback which will be used to handle each + individual commit object. +- `show_object_fn show_object`: A callback which will be used to handle each + non-commit object (so each blob, tree, or tag). +- `void *show_data`: A context buffer which is passed in turn to `show_commit` + and `show_object`. + +In addition, `traverse_commit_list_filtered()` has an additional parameter: + +- `struct oidset *omitted`: A linked-list of object IDs which the provided + filter caused to be omitted. + +It looks like these methods use callbacks we provide instead of needing us +to call it repeatedly ourselves. Cool! Let's add the callbacks first. + +For the sake of this tutorial, we'll simply keep track of how many of each kind +of object we find. At file scope in `builtin/walken.c` add the following +tracking variables: + +---- +static int commit_count; +static int tag_count; +static int blob_count; +static int tree_count; +---- + +Commits are handled by a different callback than other objects; let's do that +one first: + +---- +static void walken_show_commit(struct commit *cmt, void *buf) +{ + commit_count++; +} +---- + +The `cmt` argument is fairly self-explanatory. But it's worth mentioning that +the `buf` argument is actually the context buffer that we can provide to the +traversal calls - `show_data`, which we mentioned a moment ago. + +Since we have the `struct commit` object, we can look at all the same parts that +we looked at in our earlier commit-only walk. For the sake of this tutorial, +though, we'll just increment the commit counter and move on. + +The callback for non-commits is a little different, as we'll need to check +which kind of object we're dealing with: + +---- +static void walken_show_object(struct object *obj, const char *str, void *buf) +{ + switch (obj->type) { + case OBJ_TREE: + tree_count++; + break; + case OBJ_BLOB: + blob_count++; + break; + case OBJ_TAG: + tag_count++; + break; + case OBJ_COMMIT: + BUG("unexpected commit object in walken_show_object\n"); + default: + BUG("unexpected object type %s in walken_show_object\n", + type_name(obj->type)); + } +} +---- + +Again, `obj` is fairly self-explanatory, and we can guess that `buf` is the same +context pointer that `walken_show_commit()` receives: the `show_data` argument +to `traverse_commit_list()` and `traverse_commit_list_filtered()`. Finally, +`str` contains the name of the object, which ends up being something like +`foo.txt` (blob), `bar/baz` (tree), or `v1.2.3` (tag). + +To help assure us that we aren't double-counting commits, we'll include some +complaining if a commit object is routed through our non-commit callback; we'll +also complain if we see an invalid object type. Since those two cases should be +unreachable, and would only change in the event of a semantic change to the Git +codebase, we complain by using `BUG()` - which is a signal to a developer that +the change they made caused unintended consequences, and the rest of the +codebase needs to be updated to understand that change. `BUG()` is not intended +to be seen by the public, so it is not localized. + +Our main object walk implementation is substantially different from our commit +walk implementation, so let's make a new function to perform the object walk. We +can perform setup which is applicable to all objects here, too, to keep separate +from setup which is applicable to commit-only walks. + +We'll start by enabling all types of objects in the `struct rev_info`. We'll +also turn on `tree_blobs_in_commit_order`, which means that we will walk a +commit's tree and everything it points to immediately after we find each commit, +as opposed to waiting for the end and walking through all trees after the commit +history has been discovered. With the appropriate settings configured, we are +ready to call `prepare_revision_walk()`. + +---- +static void walken_object_walk(struct rev_info *rev) +{ + rev->tree_objects = 1; + rev->blob_objects = 1; + rev->tag_objects = 1; + rev->tree_blobs_in_commit_order = 1; + + if (prepare_revision_walk(rev)) + die(_("revision walk setup failed")); + + commit_count = 0; + tag_count = 0; + blob_count = 0; + tree_count = 0; +---- + +Let's start by calling just the unfiltered walk and reporting our counts. +Complete your implementation of `walken_object_walk()`. +We'll also need to include the `list-objects.h` header. + +---- +#include "list-objects.h" + +... + + traverse_commit_list(rev, walken_show_commit, walken_show_object, NULL); + + printf("commits %d\nblobs %d\ntags %d\ntrees %d\n", commit_count, + blob_count, tag_count, tree_count); +} +---- + +NOTE: This output is intended to be machine-parsed. Therefore, we are not +sending it to `trace_printf()`, and we are not localizing it - we need scripts +to be able to count on the formatting to be exactly the way it is shown here. +If we were intending this output to be read by humans, we would need to localize +it with `_()`. + +Finally, we'll ask `cmd_walken()` to use the object walk instead. Discussing +command line options is out of scope for this tutorial, so we'll just hardcode +a branch we can change at compile time. Where you call `final_rev_info_setup()` +and `walken_commit_walk()`, instead branch like so: + +---- + if (1) { + add_head_to_pending(&rev); + walken_object_walk(&rev); + } else { + final_rev_info_setup(argc, argv, prefix, &rev); + walken_commit_walk(&rev); + } +---- + +NOTE: For simplicity, we've avoided all the filters and sorts we applied in +`final_rev_info_setup()` and simply added `HEAD` to our pending queue. If you +want, you can certainly use the filters we added before by moving +`final_rev_info_setup()` out of the conditional and removing the call to +`add_head_to_pending()`. + +Now we can try to run our command! It should take noticeably longer than the +commit walk, but an examination of the output will give you an idea why. Your +output should look similar to this example, but with different counts: + +---- +Object walk completed. Found 55733 commits, 100274 blobs, 0 tags, and 104210 trees. +---- + +This makes sense. We have more trees than commits because the Git project has +lots of subdirectories which can change, plus at least one tree per commit. We +have no tags because we started on a commit (`HEAD`) and while tags can point to +commits, commits can't point to tags. + +NOTE: You will have different counts when you run this yourself! The number of +objects grows along with the Git project. + +=== Adding a Filter + +There are a handful of filters that we can apply to the object walk laid out in +`Documentation/rev-list-options.txt`. These filters are typically useful for +operations such as creating packfiles or performing a partial clone. They are +defined in `list-objects-filter-options.h`. For the purposes of this tutorial we +will use the "tree:1" filter, which causes the walk to omit all trees and blobs +which are not directly referenced by commits reachable from the commit in +`pending` when the walk begins. (`pending` is the list of objects which need to +be traversed during a walk; you can imagine a breadth-first tree traversal to +help understand. In our case, that means we omit trees and blobs not directly +referenced by `HEAD` or `HEAD`'s history, because we begin the walk with only +`HEAD` in the `pending` list.) + +For now, we are not going to track the omitted objects, so we'll replace those +parameters with `NULL`. For the sake of simplicity, we'll add a simple +build-time branch to use our filter or not. Preface the line calling +`traverse_commit_list()` with the following, which will remind us which kind of +walk we've just performed: + +---- + if (0) { + /* Unfiltered: */ + trace_printf(_("Unfiltered object walk.\n")); + } else { + trace_printf( + _("Filtered object walk with filterspec 'tree:1'.\n")); + + parse_list_objects_filter(&rev->filter, "tree:1"); + } + traverse_commit_list(rev, walken_show_commit, + walken_show_object, NULL); +---- + +The `rev->filter` member is usually built directly from a command +line argument, so the module provides an easy way to build one from a string. +Even though we aren't taking user input right now, we can still build one with +a hardcoded string using `parse_list_objects_filter()`. + +With the filter spec "tree:1", we are expecting to see _only_ the root tree for +each commit; therefore, the tree object count should be less than or equal to +the number of commits. (For an example of why that's true: `git commit --revert` +points to the same tree object as its grandparent.) + +=== Counting Omitted Objects + +We also have the capability to enumerate all objects which were omitted by a +filter, like with `git log --filter= --filter-print-omitted`. To do this, +change `traverse_commit_list()` to `traverse_commit_list_filtered()`, which is +able to populate an `omitted` list. Asking for this list of filtered objects +may cause performance degradations, however, because in this case, despite +filtering objects, the possibly much larger set of all reachable objects must +be processed in order to populate that list. + +First, add the `struct oidset` and related items we will use to iterate it: + +---- +#include "oidset.h" + +... + +static void walken_object_walk( + ... + + struct oidset omitted; + struct oidset_iter oit; + struct object_id *oid = NULL; + int omitted_count = 0; + oidset_init(&omitted, 0); + + ... +---- + +Replace the call to `traverse_commit_list()` with +`traverse_commit_list_filtered()` and pass a pointer to the `omitted` oidset +defined and initialized above: + +---- + ... + + traverse_commit_list_filtered(rev, + walken_show_commit, walken_show_object, NULL, &omitted); + + ... +---- + +Then, after your traversal, the `oidset` traversal is pretty straightforward. +Count all the objects within and modify the print statement: + +---- + /* Count the omitted objects. */ + oidset_iter_init(&omitted, &oit); + + while ((oid = oidset_iter_next(&oit))) + omitted_count++; + + printf("commits %d\nblobs %d\ntags %d\ntrees %d\nomitted %d\n", + commit_count, blob_count, tag_count, tree_count, omitted_count); +---- + +By running your walk with and without the filter, you should find that the total +object count in each case is identical. You can also time each invocation of +the `walken` subcommand, with and without `omitted` being passed in, to confirm +to yourself the runtime impact of tracking all omitted objects. + +=== Changing the Order + +Finally, let's demonstrate that you can also reorder walks of all objects, not +just walks of commits. First, we'll make our handlers chattier - modify +`walken_show_commit()` and `walken_show_object()` to print the object as they +go: + +---- +#include "hex.h" + +... + +static void walken_show_commit(struct commit *cmt, void *buf) +{ + trace_printf("commit: %s\n", oid_to_hex(&cmt->object.oid)); + commit_count++; +} + +static void walken_show_object(struct object *obj, const char *str, void *buf) +{ + trace_printf("%s: %s\n", type_name(obj->type), oid_to_hex(&obj->oid)); + + ... +} +---- + +NOTE: Since we will be examining this output directly as humans, we'll use +`trace_printf()` here. Additionally, since this change introduces a significant +number of printed lines, using `trace_printf()` will allow us to easily silence +those lines without having to recompile. + +(Leave the counter increment logic in place.) + +With only that change, run again (but save yourself some scrollback): + +---- +$ GIT_TRACE=1 ./bin-wrappers/git walken 2>&1 | head -n 10 +---- + +Take a look at the top commit with `git show` and the object ID you printed; it +should be the same as the output of `git show HEAD`. + +Next, let's change a setting on our `struct rev_info` within +`walken_object_walk()`. Find where you're changing the other settings on `rev`, +such as `rev->tree_objects` and `rev->tree_blobs_in_commit_order`, and add the +`reverse` setting at the bottom: + +---- + ... + + rev->tree_objects = 1; + rev->blob_objects = 1; + rev->tag_objects = 1; + rev->tree_blobs_in_commit_order = 1; + rev->reverse = 1; + + ... +---- + +Now, run again, but this time, let's grab the last handful of objects instead +of the first handful: + +---- +$ make +$ GIT_TRACE=1 ./bin-wrappers/git walken 2>&1 | tail -n 10 +---- + +The last commit object given should have the same OID as the one we saw at the +top before, and running `git show ` with that OID should give you again +the same results as `git show HEAD`. Furthermore, if you run and examine the +first ten lines again (with `head` instead of `tail` like we did before applying +the `reverse` setting), you should see that now the first commit printed is the +initial commit, `e83c5163`. + +== Wrapping Up + +Let's review. In this tutorial, we: + +- Built a commit walk from the ground up +- Enabled a grep filter for that commit walk +- Changed the sort order of that filtered commit walk +- Built an object walk (tags, commits, trees, and blobs) from the ground up +- Learned how to add a filter-spec to an object walk +- Changed the display order of the filtered object walk diff --git a/Documentation/RelNotes/1.5.0.1.txt b/Documentation/RelNotes/1.5.0.1.txt new file mode 100644 index 0000000000..fea3f9935b --- /dev/null +++ b/Documentation/RelNotes/1.5.0.1.txt @@ -0,0 +1,42 @@ +GIT v1.5.0.1 Release Notes +========================== + +Fixes since v1.5.0 +------------------ + +* Documentation updates + + - Clarifications and corrections to 1.5.0 release notes. + + - The main documentation did not link to git-remote documentation. + + - Clarified introductory text of git-rebase documentation. + + - Converted remaining mentions of update-index on Porcelain + documents to git-add/git-rm. + + - Some i18n.* configuration variables were incorrectly + described as core.*; fixed. + +* Bugfixes + + - git-add and git-update-index on a filesystem on which + executable bits are unreliable incorrectly reused st_mode + bits even when the path changed between symlink and regular + file. + + - git-daemon marks the listening sockets with FD_CLOEXEC so + that it won't be leaked into the children. + + - segfault from git-blame when the mandatory pathname + parameter was missing was fixed; usage() message is given + instead. + + - git-rev-list did not read $GIT_DIR/config file, which means + that did not honor i18n.logoutputencoding correctly. + +* Tweaks + + - sliding mmap() inefficiently mmaped the same region of a + packfile with an access pattern that used objects in the + reverse order. This has been made more efficient. diff --git a/Documentation/RelNotes/1.5.0.2.txt b/Documentation/RelNotes/1.5.0.2.txt new file mode 100644 index 0000000000..b061e50ff0 --- /dev/null +++ b/Documentation/RelNotes/1.5.0.2.txt @@ -0,0 +1,65 @@ +GIT v1.5.0.2 Release Notes +========================== + +Fixes since v1.5.0.1 +-------------------- + +* Bugfixes + + - Automated merge conflict handling when changes to symbolic + links conflicted were completely broken. The merge-resolve + strategy created a regular file with conflict markers in it + in place of the symbolic link. The default strategy, + merge-recursive was even more broken. It removed the path + that was pointed at by the symbolic link. Both of these + problems have been fixed. + + - 'git diff maint master next' did not correctly give combined + diff across three trees. + + - 'git fast-import' portability fix for Solaris. + + - 'git show-ref --verify' without arguments did not error out + but segfaulted. + + - 'git diff :tracked-file `pwd`/an-untracked-file' gave an extra + slashes after a/ and b/. + + - 'git format-patch' produced too long filenames if the commit + message had too long line at the beginning. + + - Running 'make all' and then without changing anything + running 'make install' still rebuilt some files. This + was inconvenient when building as yourself and then + installing as root (especially problematic when the source + directory is on NFS and root is mapped to nobody). + + - 'git-rerere' failed to deal with two unconflicted paths that + sorted next to each other. + + - 'git-rerere' attempted to open(2) a symlink and failed if + there was a conflict. Since a conflicting change to a + symlink would not benefit from rerere anyway, the command + now ignores conflicting changes to symlinks. + + - 'git-repack' did not like to pass more than 64 arguments + internally to underlying 'rev-list' logic, which made it + impossible to repack after accumulating many (small) packs + in the repository. + + - 'git-diff' to review the combined diff during a conflicted + merge were not reading the working tree version correctly + when changes to a symbolic link conflicted. It should have + read the data using readlink(2) but read from the regular + file the symbolic link pointed at. + + - 'git-remote' did not like period in a remote's name. + +* Documentation updates + + - added and clarified core.bare, core.legacyheaders configurations. + + - updated "git-clone --depth" documentation. + + +* Assorted git-gui fixes. diff --git a/Documentation/RelNotes/1.5.0.3.txt b/Documentation/RelNotes/1.5.0.3.txt new file mode 100644 index 0000000000..cd500f96bf --- /dev/null +++ b/Documentation/RelNotes/1.5.0.3.txt @@ -0,0 +1,58 @@ +GIT v1.5.0.3 Release Notes +========================== + +Fixes since v1.5.0.2 +-------------------- + +* Bugfixes + + - 'git.el' honors the commit coding system from the configuration. + + - 'blameview' in contrib/ correctly digs deeper when a line is + clicked. + + - 'http-push' correctly makes sure the remote side has leading + path. Earlier it started in the middle of the path, and + incorrectly. + + - 'git-merge' did not exit with non-zero status when the + working tree was dirty and cannot fast forward. It does + now. + + - 'cvsexportcommit' does not lose yet-to-be-used message file. + + - int-vs-size_t typefix when running combined diff on files + over 2GB long. + + - 'git apply --whitespace=strip' should not touch unmodified + lines. + + - 'git-mailinfo' choke when a logical header line was too long. + + - 'git show A..B' did not error out. Negative ref ("not A" in + this example) does not make sense for the purpose of the + command, so now it errors out. + + - 'git fmt-merge-msg --file' without file parameter did not + correctly error out. + + - 'git archimport' barfed upon encountering a commit without + summary. + + - 'git index-pack' did not protect itself from getting a short + read out of pread(2). + + - 'git http-push' had a few buffer overruns. + + - Build dependency fixes to rebuild fetch.o when other headers + change. + +* Documentation updates + + - user-manual updates. + + - Options to 'git remote add' were described insufficiently. + + - Configuration format.suffix was not documented. + + - Other formatting and spelling fixes. diff --git a/Documentation/RelNotes/1.5.0.4.txt b/Documentation/RelNotes/1.5.0.4.txt new file mode 100644 index 0000000000..feefa5dfd4 --- /dev/null +++ b/Documentation/RelNotes/1.5.0.4.txt @@ -0,0 +1,22 @@ +GIT v1.5.0.4 Release Notes +========================== + +Fixes since v1.5.0.3 +-------------------- + +* Bugfixes + + - git.el does not add duplicate sign-off lines. + + - git-commit shows the full stat of the resulting commit, not + just about the files in the current directory, when run from + a subdirectory. + + - "git-checkout -m '@{8 hours ago}'" had a funny failure from + eval; fixed. + + - git-gui updates. + +* Documentation updates + +* User manual updates diff --git a/Documentation/RelNotes/1.5.0.5.txt b/Documentation/RelNotes/1.5.0.5.txt new file mode 100644 index 0000000000..eeec3d73d0 --- /dev/null +++ b/Documentation/RelNotes/1.5.0.5.txt @@ -0,0 +1,26 @@ +GIT v1.5.0.5 Release Notes +========================== + +Fixes since v1.5.0.3 +-------------------- + +* Bugfixes + + - git-merge (hence git-pull) did not refuse fast-forwarding + when the working tree had local changes that would have + conflicted with it. + + - git.el does not add duplicate sign-off lines. + + - git-commit shows the full stat of the resulting commit, not + just about the files in the current directory, when run from + a subdirectory. + + - "git-checkout -m '@{8 hours ago}'" had a funny failure from + eval; fixed. + + - git-gui updates. + +* Documentation updates + +* User manual updates diff --git a/Documentation/RelNotes/1.5.0.6.txt b/Documentation/RelNotes/1.5.0.6.txt new file mode 100644 index 0000000000..c02015ad5f --- /dev/null +++ b/Documentation/RelNotes/1.5.0.6.txt @@ -0,0 +1,21 @@ +GIT v1.5.0.6 Release Notes +========================== + +Fixes since v1.5.0.5 +-------------------- + +* Bugfixes + + - a handful small fixes to gitweb. + + - build procedure for user-manual is fixed not to require locally + installed stylesheets. + + - "git commit $paths" on paths whose earlier contents were + already updated in the index were failing out. + +* Documentation + + - user-manual has better cross references. + + - gitweb installation/deployment procedure is now documented. diff --git a/Documentation/RelNotes/1.5.0.7.txt b/Documentation/RelNotes/1.5.0.7.txt new file mode 100644 index 0000000000..670ad32b85 --- /dev/null +++ b/Documentation/RelNotes/1.5.0.7.txt @@ -0,0 +1,18 @@ +GIT v1.5.0.7 Release Notes +========================== + +Fixes since v1.5.0.6 +-------------------- + +* Bugfixes + + - git-upload-pack failed to close unused pipe ends, resulting + in many zombies to hang around. + + - git-rerere was recording the contents of earlier hunks + duplicated in later hunks. This prevented resolving the same + conflict when performing the same merge the other way around. + +* Documentation + + - a few documentation fixes from Debian package maintainer. diff --git a/Documentation/RelNotes/1.5.0.txt b/Documentation/RelNotes/1.5.0.txt new file mode 100644 index 0000000000..d6d42f3183 --- /dev/null +++ b/Documentation/RelNotes/1.5.0.txt @@ -0,0 +1,469 @@ +GIT v1.5.0 Release Notes +======================== + +Old news +-------- + +This section is for people who are upgrading from ancient +versions of git. Although all of the changes in this section +happened before the current v1.4.4 release, they are summarized +here in the v1.5.0 release notes for people who skipped earlier +versions. + +As of git v1.5.0 there are some optional features that changes +the repository to allow data to be stored and transferred more +efficiently. These features are not enabled by default, as they +will make the repository unusable with older versions of git. +Specifically, the available options are: + + - There is a configuration variable core.legacyheaders that + changes the format of loose objects so that they are more + efficient to pack and to send out of the repository over git + native protocol, since v1.4.2. However, loose objects + written in the new format cannot be read by git older than + that version; people fetching from your repository using + older clients over dumb transports (e.g. http) using older + versions of git will also be affected. + + To let git use the new loose object format, you have to + set core.legacyheaders to false. + + - Since v1.4.3, configuration repack.usedeltabaseoffset allows + packfile to be created in more space efficient format, which + cannot be read by git older than that version. + + To let git use the new format for packfiles, you have to + set repack.usedeltabaseoffset to true. + +The above two new features are not enabled by default and you +have to explicitly ask for them, because they make repositories +unreadable by older versions of git, and in v1.5.0 we still do +not enable them by default for the same reason. We will change +this default probably 1 year after 1.4.2's release, when it is +reasonable to expect everybody to have new enough version of +git. + + - 'git pack-refs' appeared in v1.4.4; this command allows tags + to be accessed much more efficiently than the traditional + 'one-file-per-tag' format. Older git-native clients can + still fetch from a repository that packed and pruned refs + (the server side needs to run the up-to-date version of git), + but older dumb transports cannot. Packing of refs is done by + an explicit user action, either by use of "git pack-refs + --prune" command or by use of "git gc" command. + + - 'git -p' to paginate anything -- many commands do pagination + by default on a tty. Introduced between v1.4.1 and v1.4.2; + this may surprise old timers. + + - 'git archive' superseded 'git tar-tree' in v1.4.3; + + - 'git cvsserver' was new invention in v1.3.0; + + - 'git repo-config', 'git grep', 'git rebase' and 'gitk' were + seriously enhanced during v1.4.0 timeperiod. + + - 'gitweb' became part of git.git during v1.4.0 timeperiod and + seriously modified since then. + + - reflog is an v1.4.0 invention. This allows you to name a + revision that a branch used to be at (e.g. "git diff + master@{yesterday} master" allows you to see changes since + yesterday's tip of the branch). + + +Updates in v1.5.0 since v1.4.4 series +------------------------------------- + +* Index manipulation + + - git-add is to add contents to the index (aka "staging area" + for the next commit), whether the file the contents happen to + be is an existing one or a newly created one. + + - git-add without any argument does not add everything + anymore. Use 'git-add .' instead. Also you can add + otherwise ignored files with an -f option. + + - git-add tries to be more friendly to users by offering an + interactive mode ("git-add -i"). + + - git-commit used to refuse to commit if was + different between HEAD and the index (i.e. update-index was + used on it earlier). This check was removed. + + - git-rm is much saner and safer. It is used to remove paths + from both the index file and the working tree, and makes sure + you are not losing any local modification before doing so. + + - git-reset ... can be used to revert index + entries for selected paths. + + - git-update-index is much less visible. Many suggestions to + use the command in git output and documentation have now been + replaced by simpler commands such as "git add" or "git rm". + + +* Repository layout and objects transfer + + - The data for origin repository is stored in the configuration + file $GIT_DIR/config, not in $GIT_DIR/remotes/, for newly + created clones. The latter is still supported and there is + no need to convert your existing repository if you are + already comfortable with your workflow with the layout. + + - git-clone always uses what is known as "separate remote" + layout for a newly created repository with a working tree. + + A repository with the separate remote layout starts with only + one default branch, 'master', to be used for your own + development. Unlike the traditional layout that copied all + the upstream branches into your branch namespace (while + renaming their 'master' to your 'origin'), the new layout + puts upstream branches into local "remote-tracking branches" + with their own namespace. These can be referenced with names + such as "origin/$upstream_branch_name" and are stored in + .git/refs/remotes rather than .git/refs/heads where normal + branches are stored. + + This layout keeps your own branch namespace less cluttered, + avoids name collision with your upstream, makes it possible + to automatically track new branches created at the remote + after you clone from it, and makes it easier to interact with + more than one remote repository (you can use "git remote" to + add other repositories to track). There might be some + surprises: + + * 'git branch' does not show the remote tracking branches. + It only lists your own branches. Use '-r' option to view + the tracking branches. + + * If you are forking off of a branch obtained from the + upstream, you would have done something like 'git branch + my-next next', because traditional layout dropped the + tracking branch 'next' into your own branch namespace. + With the separate remote layout, you say 'git branch next + origin/next', which allows you to use the matching name + 'next' for your own branch. It also allows you to track a + remote other than 'origin' (i.e. where you initially cloned + from) and fork off of a branch from there the same way + (e.g. "git branch mingw j6t/master"). + + Repositories initialized with the traditional layout continue + to work. + + - New branches that appear on the origin side after a clone is + made are also tracked automatically. This is done with an + wildcard refspec "refs/heads/*:refs/remotes/origin/*", which + older git does not understand, so if you clone with 1.5.0, + you would need to downgrade remote.*.fetch in the + configuration file to specify each branch you are interested + in individually if you plan to fetch into the repository with + older versions of git (but why would you?). + + - Similarly, wildcard refspec "refs/heads/*:refs/remotes/me/*" + can be given to "git-push" command to update the tracking + branches that is used to track the repository you are pushing + from on the remote side. + + - git-branch and git-show-branch know remote tracking branches + (use the command line switch "-r" to list only tracked branches). + + - git-push can now be used to delete a remote branch or a tag. + This requires the updated git on the remote side (use "git + push :refs/heads/" to delete "branch"). + + - git-push more aggressively keeps the transferred objects + packed. Earlier we recommended to monitor amount of loose + objects and repack regularly, but you should repack when you + accumulated too many small packs this way as well. Updated + git-count-objects helps you with this. + + - git-fetch also more aggressively keeps the transferred objects + packed. This behavior of git-push and git-fetch can be + tweaked with a single configuration transfer.unpacklimit (but + usually there should not be any need for a user to tweak it). + + - A new command, git-remote, can help you manage your remote + tracking branch definitions. + + - You may need to specify explicit paths for upload-pack and/or + receive-pack due to your ssh daemon configuration on the + other end. This can now be done via remote.*.uploadpack and + remote.*.receivepack configuration. + + +* Bare repositories + + - Certain commands change their behavior in a bare repository + (i.e. a repository without associated working tree). We use + a fairly conservative heuristic (if $GIT_DIR is ".git", or + ends with "/.git", the repository is not bare) to decide if a + repository is bare, but "core.bare" configuration variable + can be used to override the heuristic when it misidentifies + your repository. + + - git-fetch used to complain updating the current branch but + this is now allowed for a bare repository. So is the use of + 'git-branch -f' to update the current branch. + + - Porcelain-ish commands that require a working tree refuses to + work in a bare repository. + + +* Reflog + + - Reflog records the history from the view point of the local + repository. In other words, regardless of the real history, + the reflog shows the history as seen by one particular + repository (this enables you to ask "what was the current + revision in _this_ repository, yesterday at 1pm?"). This + facility is enabled by default for repositories with working + trees, and can be accessed with the "branch@{time}" and + "branch@{Nth}" notation. + + - "git show-branch" learned showing the reflog data with the + new -g option. "git log" has -g option to view reflog + entries in a more verbose manner. + + - git-branch knows how to rename branches and moves existing + reflog data from the old branch to the new one. + + - In addition to the reflog support in v1.4.4 series, HEAD + reference maintains its own log. "HEAD@{5.minutes.ago}" + means the commit you were at 5 minutes ago, which takes + branch switching into account. If you want to know where the + tip of your current branch was at 5 minutes ago, you need to + explicitly say its name (e.g. "master@{5.minutes.ago}") or + omit the refname altogether i.e. "@{5.minutes.ago}". + + - The commits referred to by reflog entries are now protected + against pruning. The new command "git reflog expire" can be + used to truncate older reflog entries and entries that refer + to commits that have been pruned away previously with older + versions of git. + + Existing repositories that have been using reflog may get + complaints from fsck-objects and may not be able to run + git-repack, if you had run git-prune from older git; please + run "git reflog expire --stale-fix --all" first to remove + reflog entries that refer to commits that are no longer in + the repository when that happens. + + +* Cruft removal + + - We used to say "old commits are retrievable using reflog and + 'master@{yesterday}' syntax as long as you haven't run + git-prune". We no longer have to say the latter half of the + above sentence, as git-prune does not remove things reachable + from reflog entries. + + - There is a toplevel garbage collector script, 'git-gc', that + runs periodic cleanup functions, including 'git-repack -a -d', + 'git-reflog expire', 'git-pack-refs --prune', and 'git-rerere + gc'. + + - The output from fsck ("fsck-objects" is called just "fsck" + now, but the old name continues to work) was needlessly + alarming in that it warned missing objects that are reachable + only from dangling objects. This has been corrected and the + output is much more useful. + + +* Detached HEAD + + - You can use 'git-checkout' to check out an arbitrary revision + or a tag as well, instead of named branches. This will + dissociate your HEAD from the branch you are currently on. + + A typical use of this feature is to "look around". E.g. + + $ git checkout v2.6.16 + ... compile, test, etc. + $ git checkout v2.6.17 + ... compile, test, etc. + + - After detaching your HEAD, you can go back to an existing + branch with usual "git checkout $branch". Also you can + start a new branch using "git checkout -b $newbranch" to + start a new branch at that commit. + + - You can even pull from other repositories, make merges and + commits while your HEAD is detached. Also you can use "git + reset" to jump to arbitrary commit, while still keeping your + HEAD detached. + + Remember that a detached state is volatile, i.e. it will be forgotten + as soon as you move away from it with the checkout or reset command, + unless a branch is created from it as mentioned above. It is also + possible to rescue a lost detached state from the HEAD reflog. + + +* Packed refs + + - Repositories with hundreds of tags have been paying large + overhead, both in storage and in runtime, due to the + traditional one-ref-per-file format. A new command, + git-pack-refs, can be used to "pack" them in more efficient + representation (you can let git-gc do this for you). + + - Clones and fetches over dumb transports are now aware of + packed refs and can download from repositories that use + them. + + +* Configuration + + - configuration related to color setting are consolidated under + color.* namespace (older diff.color.*, status.color.* are + still supported). + + - 'git-repo-config' command is accessible as 'git-config' now. + + +* Updated features + + - git-describe uses better criteria to pick a base ref. It + used to pick the one with the newest timestamp, but now it + picks the one that is topologically the closest (that is, + among ancestors of commit C, the ref T that has the shortest + output from "git-rev-list T..C" is chosen). + + - git-describe gives the number of commits since the base ref + between the refname and the hash suffix. E.g. the commit one + before v2.6.20-rc6 in the kernel repository is: + + v2.6.20-rc5-306-ga21b069 + + which tells you that its object name begins with a21b069, + v2.6.20-rc5 is an ancestor of it (meaning, the commit + contains everything -rc5 has), and there are 306 commits + since v2.6.20-rc5. + + - git-describe with --abbrev=0 can be used to show only the + name of the base ref. + + - git-blame learned a new option, --incremental, that tells it + to output the blames as they are assigned. A sample script + to use it is also included as contrib/blameview. + + - git-blame starts annotating from the working tree by default. + + +* Less external dependency + + - We no longer require the "merge" program from the RCS suite. + All 3-way file-level merges are now done internally. + + - The original implementation of git-merge-recursive which was + in Python has been removed; we have a C implementation of it + now. + + - git-shortlog is no longer a Perl script. It no longer + requires output piped from git-log; it can accept revision + parameters directly on the command line. + + +* I18n + + - We have always encouraged the commit message to be encoded in + UTF-8, but the users are allowed to use legacy encoding as + appropriate for their projects. This will continue to be the + case. However, a non UTF-8 commit encoding _must_ be + explicitly set with i18n.commitencoding in the repository + where a commit is made; otherwise git-commit-tree will + complain if the log message does not look like a valid UTF-8 + string. + + - The value of i18n.commitencoding in the originating + repository is recorded in the commit object on the "encoding" + header, if it is not UTF-8. git-log and friends notice this, + and re-encodes the message to the log output encoding when + displaying, if they are different. The log output encoding + is determined by "git log --encoding=", + i18n.logoutputencoding configuration, or i18n.commitencoding + configuration, in the decreasing order of preference, and + defaults to UTF-8. + + - Tools for e-mailed patch application now default to -u + behavior; i.e. it always re-codes from the e-mailed encoding + to the encoding specified with i18n.commitencoding. This + unfortunately forces projects that have happily been using a + legacy encoding without setting i18n.commitencoding to set + the configuration, but taken with other improvement, please + excuse us for this very minor one-time inconvenience. + + +* e-mailed patches + + - See the above I18n section. + + - git-format-patch now enables --binary without being asked. + git-am does _not_ default to it, as sending binary patch via + e-mail is unusual and is harder to review than textual + patches and it is prudent to require the person who is + applying the patch to explicitly ask for it. + + - The default suffix for git-format-patch output is now ".patch", + not ".txt". This can be changed with --suffix=.txt option, + or setting the config variable "format.suffix" to ".txt". + + +* Foreign SCM interfaces + + - git-svn now requires the Perl SVN:: libraries, the + command-line backend was too slow and limited. + + - the 'commit' subcommand of git-svn has been renamed to + 'set-tree', and 'dcommit' is the recommended replacement for + day-to-day work. + + - git fast-import backend. + + +* User support + + - Quite a lot of documentation updates. + + - Bash completion scripts have been updated heavily. + + - Better error messages for often used Porcelainish commands. + + - Git GUI. This is a simple Tk based graphical interface for + common Git operations. + + +* Sliding mmap + + - We used to assume that we can mmap the whole packfile while + in use, but with a large project this consumes huge virtual + memory space and truly huge ones would not fit in the + userland address space on 32-bit platforms. We now mmap huge + packfile in pieces to avoid this problem. + + +* Shallow clones + + - There is a partial support for 'shallow' repositories that + keeps only recent history. A 'shallow clone' is created by + specifying how deep that truncated history should be + (e.g. "git clone --depth 5 git://some.where/repo.git"). + + Currently a shallow repository has number of limitations: + + - Cloning and fetching _from_ a shallow clone are not + supported (nor tested -- so they might work by accident but + they are not expected to). + + - Pushing from nor into a shallow clone are not expected to + work. + + - Merging inside a shallow repository would work as long as a + merge base is found in the recent history, but otherwise it + will be like merging unrelated histories and may result in + huge conflicts. + + but this would be more than adequate for people who want to + look at near the tip of a big project with a deep history and + send patches in e-mail format. diff --git a/Documentation/RelNotes/1.5.1.1.txt b/Documentation/RelNotes/1.5.1.1.txt new file mode 100644 index 0000000000..91471213bd --- /dev/null +++ b/Documentation/RelNotes/1.5.1.1.txt @@ -0,0 +1,65 @@ +GIT v1.5.1.1 Release Notes +========================== + +Fixes since v1.5.1 +------------------ + +* Documentation updates + + - The --left-right option of rev-list and friends is documented. + + - The documentation for cvsimport has been majorly improved. + + - "git-show-ref --exclude-existing" was documented. + +* Bugfixes + + - The implementation of -p option in "git cvsexportcommit" had + the meaning of -C (context reduction) option wrong, and + loosened the context requirements when it was told to be + strict. + + - "git cvsserver" did not behave like the real cvsserver when + client side removed a file from the working tree without + doing anything else on the path. In such a case, it should + restore it from the checked out revision. + + - "git fsck" issued an alarming error message on detached + HEAD. It is not an error since at least 1.5.0. + + - "git send-email" produced of References header of unbounded length; + fixed this with line-folding. + + - "git archive" to download from remote site should not + require you to be in a git repository, but it incorrectly + did. + + - "git apply" ignored -p for "diff --git" formatted + patches. + + - "git rerere" recorded a conflict that had one side empty + (the other side adds) incorrectly; this made merging in the + other direction fail to use previously recorded resolution. + + - t4200 test was broken where "wc -l" pads its output with + spaces. + + - "git branch -m old new" to rename branch did not work + without a configuration file in ".git/config". + + - The sample hook for notification e-mail was misnamed. + + - gitweb did not show type-changing patch correctly in the + blobdiff view. + + - git-svn did not error out with incorrect command line options. + + - git-svn fell into an infinite loop when insanely long commit + message was found. + + - git-svn dcommit and rebase was confused by patches that were + merged from another branch that is managed by git-svn. + + - git-svn used to get confused when globbing remote branch/tag + spec (e.g. "branches = proj/branches/*:refs/remotes/origin/*") + is used and there was a plain file that matched the glob. diff --git a/Documentation/RelNotes/1.5.1.2.txt b/Documentation/RelNotes/1.5.1.2.txt new file mode 100644 index 0000000000..d88456306c --- /dev/null +++ b/Documentation/RelNotes/1.5.1.2.txt @@ -0,0 +1,50 @@ +GIT v1.5.1.2 Release Notes +========================== + +Fixes since v1.5.1.1 +-------------------- + +* Bugfixes + + - "git clone" over http from a repository that has lost the + loose refs by running "git pack-refs" were broken (a code to + deal with this was added to "git fetch" in v1.5.0, but it + was missing from "git clone"). + + - "git diff a/ b/" incorrectly fell in "diff between two + filesystem objects" codepath, when the user most likely + wanted to limit the extent of output to two tracked + directories. + + - git-quiltimport had the same bug as we fixed for + git-applymbox in v1.5.1.1 -- it gave an alarming "did not + have any patch" message (but did not actually fail and was + harmless). + + - various git-svn fixes. + + - Sample update hook incorrectly always refused requests to + delete branches through push. + + - git-blame on a very long working tree path had buffer + overrun problem. + + - git-apply did not like to be fed two patches in a row that created + and then modified the same file. + + - git-svn was confused when a non-project was stored directly under + trunk/, branches/ and tags/. + + - git-svn wants the Error.pm module that was at least as new + as what we ship as part of git; install ours in our private + installation location if the one on the system is older. + + - An earlier update to command line integer parameter parser was + botched and made 'update-index --cacheinfo' completely useless. + + +* Documentation updates + + - Various documentation updates from J. Bruce Fields, Frank + Lichtenheld, Alex Riesen and others. Andrew Ruder started a + war on undocumented options. diff --git a/Documentation/RelNotes/1.5.1.3.txt b/Documentation/RelNotes/1.5.1.3.txt new file mode 100644 index 0000000000..876408b65a --- /dev/null +++ b/Documentation/RelNotes/1.5.1.3.txt @@ -0,0 +1,45 @@ +GIT v1.5.1.3 Release Notes +========================== + +Fixes since v1.5.1.2 +-------------------- + +* Bugfixes + + - git-add tried to optimize by finding common leading + directories across its arguments but botched, causing very + confused behaviour. + + - unofficial rpm.spec file shipped with git was letting + ETC_GITCONFIG set to /usr/etc/gitconfig. Tweak the official + Makefile to make it harder for distro people to make the + same mistake, by setting the variable to /etc/gitconfig if + prefix is set to /usr. + + - git-svn inconsistently stripped away username from the URL + only when svnsync_props was in use. + + - git-svn got confused when handling symlinks on Mac OS. + + - git-send-email was not quoting recipient names that have + period '.' in them. Also it did not allow overriding + envelope sender, which made it impossible to send patches to + certain subscriber-only lists. + + - built-in write_tree() routine had a sequence that renamed a + file that is still open, which some systems did not like. + + - when memory is very tight, sliding mmap code to read + packfiles incorrectly closed the fd that was still being + used to read the pack. + + - import-tars contributed front-end for fastimport was passing + wrong directory modes without checking. + + - git-fastimport trusted its input too much and allowed to + create corrupt tree objects with entries without a name. + + - git-fetch needlessly barfed when too long reflog action + description was given by the caller. + +Also contains various documentation updates. diff --git a/Documentation/RelNotes/1.5.1.4.txt b/Documentation/RelNotes/1.5.1.4.txt new file mode 100644 index 0000000000..df2f66ccb5 --- /dev/null +++ b/Documentation/RelNotes/1.5.1.4.txt @@ -0,0 +1,30 @@ +GIT v1.5.1.4 Release Notes +========================== + +Fixes since v1.5.1.3 +-------------------- + +* Bugfixes + + - "git-http-fetch" did not work around a bug in libcurl + earlier than 7.16 (curl_multi_remove_handle() was broken). + + - "git cvsserver" handles a file that was once removed and + then added again correctly. + + - import-tars script (in contrib/) handles GNU tar archives + that contain pathnames longer than 100 bytes (long-link + extension) correctly. + + - xdelta test program did not build correctly. + + - gitweb sometimes tried incorrectly to apply function to + decode utf8 twice, resulting in corrupt output. + + - "git blame -C" mishandled text at the end of a group of + lines. + + - "git log/rev-list --boundary" did not produce output + correctly without --left-right option. + + - Many documentation updates. diff --git a/Documentation/RelNotes/1.5.1.5.txt b/Documentation/RelNotes/1.5.1.5.txt new file mode 100644 index 0000000000..b0ab8eb371 --- /dev/null +++ b/Documentation/RelNotes/1.5.1.5.txt @@ -0,0 +1,42 @@ +GIT v1.5.1.5 Release Notes +========================== + +Fixes since v1.5.1.4 +-------------------- + +* Bugfixes + + - git-send-email did not understand aliases file for mutt, which + allows leading whitespaces. + + - git-format-patch emitted Content-Type and Content-Transfer-Encoding + headers for non ASCII contents, but failed to add MIME-Version. + + - git-name-rev had a buffer overrun with a deep history. + + - contributed script import-tars did not get the directory in + tar archives interpreted correctly. + + - git-svn was reported to segfault for many people on list and + #git; hopefully this has been fixed. + + - "git-svn clone" does not try to minimize the URL + (i.e. connect to higher level hierarchy) by default, as this + can prevent clone to fail if only part of the repository + (e.g. 'trunk') is open to public. + + - "git checkout branch^0" did not detach the head when you are + already on 'branch'; backported the fix from the 'master'. + + - "git-config section.var" did not correctly work when + existing configuration file had both [section] and [section "name"] + next to each other. + + - "git clone ../other-directory" was fooled if the current + directory $PWD points at is a symbolic link. + + - (build) tree_entry_extract() function was both static inline + and extern, which caused trouble compiling with Forte12 + compilers on Sun. + + - Many many documentation fixes and updates. diff --git a/Documentation/RelNotes/1.5.1.6.txt b/Documentation/RelNotes/1.5.1.6.txt new file mode 100644 index 0000000000..55f3ac13e3 --- /dev/null +++ b/Documentation/RelNotes/1.5.1.6.txt @@ -0,0 +1,45 @@ +GIT v1.5.1.6 Release Notes +========================== + +Fixes since v1.5.1.4 +-------------------- + +* Bugfixes + + - git-send-email did not understand aliases file for mutt, which + allows leading whitespaces. + + - git-format-patch emitted Content-Type and Content-Transfer-Encoding + headers for non ASCII contents, but failed to add MIME-Version. + + - git-name-rev had a buffer overrun with a deep history. + + - contributed script import-tars did not get the directory in + tar archives interpreted correctly. + + - git-svn was reported to segfault for many people on list and + #git; hopefully this has been fixed. + + - git-svn also had a bug to crash svnserve by sending a bad + sequence of requests. + + - "git-svn clone" does not try to minimize the URL + (i.e. connect to higher level hierarchy) by default, as this + can prevent clone to fail if only part of the repository + (e.g. 'trunk') is open to public. + + - "git checkout branch^0" did not detach the head when you are + already on 'branch'; backported the fix from the 'master'. + + - "git-config section.var" did not correctly work when + existing configuration file had both [section] and [section "name"] + next to each other. + + - "git clone ../other-directory" was fooled if the current + directory $PWD points at is a symbolic link. + + - (build) tree_entry_extract() function was both static inline + and extern, which caused trouble compiling with Forte12 + compilers on Sun. + + - Many many documentation fixes and updates. diff --git a/Documentation/RelNotes/1.5.1.txt b/Documentation/RelNotes/1.5.1.txt new file mode 100644 index 0000000000..daed367270 --- /dev/null +++ b/Documentation/RelNotes/1.5.1.txt @@ -0,0 +1,371 @@ +GIT v1.5.1 Release Notes +======================== + +Updates since v1.5.0 +-------------------- + +* Deprecated commands and options. + + - git-diff-stages and git-resolve have been removed. + +* New commands and options. + + - "git log" and friends take --reverse, which instructs them + to give their output in the order opposite from their usual. + They typically output from new to old, but with this option + their output would read from old to new. "git shortlog" + usually lists older commits first, but with this option, + they are shown from new to old. + + - "git log --pretty=format:" to allow more flexible + custom log output. + + - "git diff" learned --ignore-space-at-eol. This is a weaker + form of --ignore-space-change. + + - "git diff --no-index pathA pathB" can be used as diff + replacement with git specific enhancements. + + - "git diff --no-index" can read from '-' (standard input). + + - "git diff" also learned --exit-code to exit with non-zero + status when it found differences. In the future we might + want to make this the default but that would be a rather big + backward incompatible change; it will stay as an option for + now. + + - "git diff --quiet" is --exit-code with output turned off, + meant for scripted use to quickly determine if there is any + tree-level difference. + + - Textual patch generation with "git diff" without -w/-b + option has been significantly optimized. "git blame" got + faster because of the same change. + + - "git log" and "git rev-list" has been optimized + significantly when they are used with pathspecs. + + - "git branch --track" can be used to set up configuration + variables to help it easier to base your work on branches + you track from a remote site. + + - "git format-patch --attach" now emits attachments. Use + --inline to get an inlined multipart/mixed. + + - "git name-rev" learned --refs=, to limit the tags + used for naming the given revisions only to the ones + matching the given pattern. + + - "git remote update" is to run "git fetch" for defined remotes + to update tracking branches. + + - "git cvsimport" can now take '-d' to talk with a CVS + repository different from what are recorded in CVS/Root + (overriding it with environment CVSROOT does not work). + + - "git bundle" can help sneaker-netting your changes between + repositories. + + - "git mergetool" can help 3-way file-level conflict + resolution with your favorite graphical merge tools. + + - A new configuration "core.symlinks" can be used to disable + symlinks on filesystems that do not support them; they are + checked out as regular files instead. + + - You can name a commit object with its first line of the + message. The syntax to use is ':/message text'. E.g. + + $ git show ":/object name: introduce ':/' notation" + + means the same thing as: + + $ git show 28a4d940443806412effa246ecc7768a21553ec7 + + - "git bisect" learned a new command "run" that takes a script + to run after each revision is checked out to determine if it + is good or bad, to automate the bisection process. + + - "git log" family learned a new traversal option --first-parent, + which does what the name suggests. + + +* Updated behavior of existing commands. + + - "git-merge-recursive" used to barf when there are more than + one common ancestors for the merge, and merging them had a + rename/rename conflict. This has been fixed. + + - "git fsck" does not barf on corrupt loose objects. + + - "git rm" does not remove newly added files without -f. + + - "git archimport" allows remapping when coming up with git + branch names from arch names. + + - git-svn got almost a rewrite. + + - core.autocrlf configuration, when set to 'true', makes git + to convert CRLF at the end of lines in text files to LF when + reading from the filesystem, and convert in reverse when + writing to the filesystem. The variable can be set to + 'input', in which case the conversion happens only while + reading from the filesystem but files are written out with + LF at the end of lines. Currently, which paths to consider + 'text' (i.e. be subjected to the autocrlf mechanism) is + decided purely based on the contents, but the plan is to + allow users to explicitly override this heuristic based on + paths. + + - The behavior of 'git-apply', when run in a subdirectory, + without --index nor --cached were inconsistent with that of + the command with these options. This was fixed to match the + behavior with --index. A patch that is meant to be applied + with -p1 from the toplevel of the project tree can be + applied with any custom -p option. A patch that is not + relative to the toplevel needs to be applied with -p + option with or without --index (or --cached). + + - "git diff" outputs a trailing HT when pathnames have embedded + SP on +++/--- header lines, in order to help "GNU patch" to + parse its output. "git apply" was already updated to accept + this modified output format since ce74618d (Sep 22, 2006). + + - "git cvsserver" runs hooks/update and honors its exit status. + + - "git cvsserver" can be told to send everything with -kb. + + - "git diff --check" also honors the --color output option. + + - "git name-rev" used to stress the fact that a ref is a tag too + much, by saying something like "v1.2.3^0~22". It now says + "v1.2.3~22" in such a case (it still says "v1.2.3^0" if it does + not talk about an ancestor of the commit that is tagged, which + makes sense). + + - "git rev-list --boundary" now shows boundary markers for the + commits omitted by --max-age and --max-count condition. + + - The configuration mechanism now reads $(prefix)/etc/gitconfig. + + - "git apply --verbose" shows what preimage lines were wanted + when it couldn't find them. + + - "git status" in a read-only repository got a bit saner. + + - "git fetch" (hence "git clone" and "git pull") are less + noisy when the output does not go to tty. + + - "git fetch" between repositories with many refs were slow + even when there are not many changes that needed + transferring. This has been sped up by partially rewriting + the heaviest parts in C. + + - "git mailinfo" which splits an e-mail into a patch and the + meta-information was rewritten, thanks to Don Zickus. It + handles nested multipart better. The command was broken for + a brief period on 'master' branch since 1.5.0 but the + breakage is fixed now. + + - send-email learned configurable bcc and chain-reply-to. + + - "git remote show $remote" also talks about branches that + would be pushed if you run "git push remote". + + - Using objects from packs is now seriously optimized by clever + use of a cache. This should be most noticeable in git-log + family of commands that involve reading many tree objects. + In addition, traversing revisions while filtering changes + with pathspecs is made faster by terminating the comparison + between the trees as early as possible. + + +* Hooks + + - The part to send out notification e-mails was removed from + the sample update hook, as it was not an appropriate place + to do so. The proper place to do this is the new post-receive + hook. An example hook has been added to contrib/hooks/. + + +* Others + + - git-revert, git-gc and git-cherry-pick are now built-ins. + +Fixes since v1.5.0 +------------------ + +These are all in v1.5.0.x series. + +* Documentation updates + + - Clarifications and corrections to 1.5.0 release notes. + + - The main documentation did not link to git-remote documentation. + + - Clarified introductory text of git-rebase documentation. + + - Converted remaining mentions of update-index on Porcelain + documents to git-add/git-rm. + + - Some i18n.* configuration variables were incorrectly + described as core.*; fixed. + + - added and clarified core.bare, core.legacyheaders configurations. + + - updated "git-clone --depth" documentation. + + - user-manual updates. + + - Options to 'git remote add' were described insufficiently. + + - Configuration format.suffix was not documented. + + - Other formatting and spelling fixes. + + - user-manual has better cross references. + + - gitweb installation/deployment procedure is now documented. + + +* Bugfixes + + - git-upload-pack closes unused pipe ends; earlier this caused + many zombies to hang around. + + - git-rerere was recording the contents of earlier hunks + duplicated in later hunks. This prevented resolving the same + conflict when performing the same merge the other way around. + + - git-add and git-update-index on a filesystem on which + executable bits are unreliable incorrectly reused st_mode + bits even when the path changed between symlink and regular + file. + + - git-daemon marks the listening sockets with FD_CLOEXEC so + that it won't be leaked into the children. + + - segfault from git-blame when the mandatory pathname + parameter was missing was fixed; usage() message is given + instead. + + - git-rev-list did not read $GIT_DIR/config file, which means + that did not honor i18n.logoutputencoding correctly. + + - Automated merge conflict handling when changes to symbolic + links conflicted were completely broken. The merge-resolve + strategy created a regular file with conflict markers in it + in place of the symbolic link. The default strategy, + merge-recursive was even more broken. It removed the path + that was pointed at by the symbolic link. Both of these + problems have been fixed. + + - 'git diff maint master next' did not correctly give combined + diff across three trees. + + - 'git fast-import' portability fix for Solaris. + + - 'git show-ref --verify' without arguments did not error out + but segfaulted. + + - 'git diff :tracked-file `pwd`/an-untracked-file' gave an extra + slashes after a/ and b/. + + - 'git format-patch' produced too long filenames if the commit + message had too long line at the beginning. + + - Running 'make all' and then without changing anything + running 'make install' still rebuilt some files. This + was inconvenient when building as yourself and then + installing as root (especially problematic when the source + directory is on NFS and root is mapped to nobody). + + - 'git-rerere' failed to deal with two unconflicted paths that + sorted next to each other. + + - 'git-rerere' attempted to open(2) a symlink and failed if + there was a conflict. Since a conflicting change to a + symlink would not benefit from rerere anyway, the command + now ignores conflicting changes to symlinks. + + - 'git-repack' did not like to pass more than 64 arguments + internally to underlying 'rev-list' logic, which made it + impossible to repack after accumulating many (small) packs + in the repository. + + - 'git-diff' to review the combined diff during a conflicted + merge were not reading the working tree version correctly + when changes to a symbolic link conflicted. It should have + read the data using readlink(2) but read from the regular + file the symbolic link pointed at. + + - 'git-remote' did not like period in a remote's name. + + - 'git.el' honors the commit coding system from the configuration. + + - 'blameview' in contrib/ correctly digs deeper when a line is + clicked. + + - 'http-push' correctly makes sure the remote side has leading + path. Earlier it started in the middle of the path, and + incorrectly. + + - 'git-merge' did not exit with non-zero status when the + working tree was dirty and cannot fast forward. It does + now. + + - 'cvsexportcommit' does not lose yet-to-be-used message file. + + - int-vs-size_t typefix when running combined diff on files + over 2GB long. + + - 'git apply --whitespace=strip' should not touch unmodified + lines. + + - 'git-mailinfo' choke when a logical header line was too long. + + - 'git show A..B' did not error out. Negative ref ("not A" in + this example) does not make sense for the purpose of the + command, so now it errors out. + + - 'git fmt-merge-msg --file' without file parameter did not + correctly error out. + + - 'git archimport' barfed upon encountering a commit without + summary. + + - 'git index-pack' did not protect itself from getting a short + read out of pread(2). + + - 'git http-push' had a few buffer overruns. + + - Build dependency fixes to rebuild fetch.o when other headers + change. + + - git.el does not add duplicate sign-off lines. + + - git-commit shows the full stat of the resulting commit, not + just about the files in the current directory, when run from + a subdirectory. + + - "git-checkout -m '@{8 hours ago}'" had a funny failure from + eval; fixed. + + - git-merge (hence git-pull) did not refuse fast-forwarding + when the working tree had local changes that would have + conflicted with it. + + - a handful small fixes to gitweb. + + - build procedure for user-manual is fixed not to require locally + installed stylesheets. + + - "git commit $paths" on paths whose earlier contents were + already updated in the index were failing out. + + +* Tweaks + + - sliding mmap() inefficiently mmaped the same region of a + packfile with an access pattern that used objects in the + reverse order. This has been made more efficient. diff --git a/Documentation/RelNotes/1.5.2.1.txt b/Documentation/RelNotes/1.5.2.1.txt new file mode 100644 index 0000000000..d41984df0b --- /dev/null +++ b/Documentation/RelNotes/1.5.2.1.txt @@ -0,0 +1,47 @@ +GIT v1.5.2.1 Release Notes +========================== + +Fixes since v1.5.2 +------------------ + +* Bugfixes + + - Temporary files that are used when invoking external diff + programs did not tolerate a long TMPDIR. + + - git-daemon did not notice when it could not write into its + pid file. + + - git-status did not honor core.excludesFile configuration like + git-add did. + + - git-annotate did not work from a subdirectory while + git-blame did. + + - git-cvsserver should have disabled access to a repository + with "gitcvs.pserver.enabled = false" set even when + "gitcvs.enabled = true" was set at the same time. It + didn't. + + - git-cvsimport did not work correctly in a repository with + its branch heads were packed with pack-refs. + + - ident unexpansion to squash "$Id: xxx $" that is in the + repository copy removed incorrect number of bytes. + + - git-svn misbehaved when the subversion repository did not + provide MD5 checksums for files. + + - git rebase (and git am) misbehaved on commits that have '\n' + (literally backslash and en, not a linefeed) in the title. + + - code to decode base85 used in binary patches had one error + return codepath wrong. + + - RFC2047 Q encoding output by git-format-patch used '_' for a + space, which is not understood by some programs. It uses =20 + which is safer. + + - git-fastimport --import-marks was broken; fixed. + + - A lot of documentation updates, clarifications and fixes. diff --git a/Documentation/RelNotes/1.5.2.2.txt b/Documentation/RelNotes/1.5.2.2.txt new file mode 100644 index 0000000000..7bfa341750 --- /dev/null +++ b/Documentation/RelNotes/1.5.2.2.txt @@ -0,0 +1,61 @@ +GIT v1.5.2.2 Release Notes +========================== + +Fixes since v1.5.2.1 +-------------------- + +* Usability fix + + - git-gui is shipped with its updated blame interface. It is + rumored that the older one was not just unusable but was + active health hazard, but this one is actually pretty. + Please see for yourself. + +* Bugfixes + + - "git checkout fubar" was utterly confused when there is a + branch fubar and a tag fubar at the same time. It correctly + checks out the branch fubar now. + + - "git clone /path/foo" to clone a local /path/foo.git + repository left an incorrect configuration. + + - "git send-email" correctly unquotes RFC 2047 quoted names in + the patch-email before using their values. + + - We did not accept number of seconds since epoch older than + year 2000 as a valid timestamp. We now interpret positive + integers more than 8 digits as such, which allows us to + express timestamps more recent than March 1973. + + - git-cvsimport did not work when you have GIT_DIR to point + your repository at a nonstandard location. + + - Some systems (notably, Solaris) lack hstrerror() to make + h_errno human readable; prepare a replacement + implementation. + + - .gitignore file listed git-core.spec but what we generate is + git.spec, and nobody noticed for a long time. + + - "git-merge-recursive" does not try to run file level merge + on binary files. + + - "git-branch --track" did not create tracking configuration + correctly when the branch name had slash in it. + + - The email address of the user specified with user.email + configuration was overridden by EMAIL environment variable. + + - The tree parser did not warn about tree entries with + nonsense file modes, and assumed they must be blobs. + + - "git log -z" without any other request to generate diff still + invoked the diff machinery, wasting cycles. + +* Documentation + + - Many updates to fix stale or missing documentation. + + - Although our documentation was primarily meant to be formatted + with AsciiDoc7, formatting with AsciiDoc8 is supported better. diff --git a/Documentation/RelNotes/1.5.2.3.txt b/Documentation/RelNotes/1.5.2.3.txt new file mode 100644 index 0000000000..addb22955b --- /dev/null +++ b/Documentation/RelNotes/1.5.2.3.txt @@ -0,0 +1,27 @@ +GIT v1.5.2.3 Release Notes +========================== + +Fixes since v1.5.2.2 +-------------------- + + * Bugfixes + + - Version 2 pack index format was introduced in version 1.5.2 + to support pack files that has offset that cannot be + represented in 32-bit. The runtime code to validate such + an index mishandled such an index for an empty pack. + + - Commit walkers (most notably, fetch over http protocol) + tried to traverse commit objects contained in trees (aka + subproject); they shouldn't. + + - A build option NO_R_TO_GCC_LINKER was not explained in Makefile + comment correctly. + + * Documentation Fixes and Updates + + - git-config --regexp was not documented properly. + + - git-repack -a was not documented properly. + + - git-remote -n was not documented properly. diff --git a/Documentation/RelNotes/1.5.2.4.txt b/Documentation/RelNotes/1.5.2.4.txt new file mode 100644 index 0000000000..75cff475f6 --- /dev/null +++ b/Documentation/RelNotes/1.5.2.4.txt @@ -0,0 +1,28 @@ +GIT v1.5.2.4 Release Notes +========================== + +Fixes since v1.5.2.3 +-------------------- + + * Bugfixes + + - "git-gui" bugfixes, including a handful fixes to run it + better on Cygwin/MSYS. + + - "git checkout" failed to switch back and forth between + branches, one of which has "frotz -> xyzzy" symlink and + file "xyzzy/filfre", while the other one has a file + "frotz/filfre". + + - "git prune" used to segfault upon seeing a commit that is + referred to by a tree object (aka "subproject"). + + - "git diff --name-status --no-index" mishandled an added file. + + - "git apply --reverse --whitespace=warn" still complained + about whitespaces that a forward application would have + introduced. + + * Documentation Fixes and Updates + + - A handful documentation updates. diff --git a/Documentation/RelNotes/1.5.2.5.txt b/Documentation/RelNotes/1.5.2.5.txt new file mode 100644 index 0000000000..e8281c72a0 --- /dev/null +++ b/Documentation/RelNotes/1.5.2.5.txt @@ -0,0 +1,30 @@ +GIT v1.5.2.5 Release Notes +========================== + +Fixes since v1.5.2.4 +-------------------- + + * Bugfixes + + - "git add -u" had a serious data corruption problem in one + special case (when the changes to a subdirectory's files + consist only deletion of files). + + - "git add -u " did not work from a subdirectory. + + - "git apply" left an empty directory after all its files are + renamed away. + + - "git $anycmd foo/bar", when there is a file 'foo' in the + working tree, complained that "git $anycmd foo/bar --" form + should be used to disambiguate between revs and files, + which was completely bogus. + + - "git checkout-index" and other commands that checks out + files to the work tree tried unlink(2) on directories, + which is a sane thing to do on sane systems, but not on + Solaris when you are root. + + * Documentation Fixes and Updates + + - A handful documentation fixes. diff --git a/Documentation/RelNotes/1.5.2.txt b/Documentation/RelNotes/1.5.2.txt new file mode 100644 index 0000000000..e8328d090a --- /dev/null +++ b/Documentation/RelNotes/1.5.2.txt @@ -0,0 +1,197 @@ +GIT v1.5.2 Release Notes +======================== + +Updates since v1.5.1 +-------------------- + +* Plumbing level superproject support. + + You can include a subdirectory that has an independent git + repository in your index and tree objects of your project + ("superproject"). This plumbing (i.e. "core") level + superproject support explicitly excludes recursive behaviour. + + The "subproject" entries in the index and trees of a superproject + are incompatible with older versions of git. Experimenting with + the plumbing level support is encouraged, but be warned that + unless everybody in your project updates to this release or + later, using this feature would make your project + inaccessible by people with older versions of git. + +* Plumbing level gitattributes support. + + The gitattributes mechanism allows you to add 'attributes' to + paths in your project, and affect the way certain git + operations work. Currently you can influence if a path is + considered a binary or text (the former would be treated by + 'git diff' not to produce textual output; the latter can go + through the line endings conversion process in repositories + with core.autocrlf set), expand and unexpand '$Id$' keyword + with blob object name, specify a custom 3-way merge driver, + and specify a custom diff driver. You can also apply + arbitrary filter to contents on check-in/check-out codepath + but this feature is an extremely sharp-edged razor and needs + to be handled with caution (do not use it unless you + understand the earlier mailing list discussion on keyword + expansion). These conversions apply when checking files in + or out, and exporting via git-archive. + +* The packfile format now optionally supports 64-bit index. + + This release supports the "version 2" format of the .idx + file. This is automatically enabled when a huge packfile + needs more than 32-bit to express offsets of objects in the + pack. + +* Comes with an updated git-gui 0.7.1 + +* Updated gitweb: + + - can show combined diff for merges; + - uses font size of user's preference, not hardcoded in pixels; + - can now 'grep'; + +* New commands and options. + + - "git bisect start" can optionally take a single bad commit and + zero or more good commits on the command line. + + - "git shortlog" can optionally be told to wrap its output. + + - "subtree" merge strategy allows another project to be merged in as + your subdirectory. + + - "git format-patch" learned a new --subject-prefix= + option, to override the built-in "[PATCH]". + + - "git add -u" is a quick way to do the first stage of "git + commit -a" (i.e. update the index to match the working + tree); it obviously does not make a commit. + + - "git clean" honors a new configuration, "clean.requireforce". When + set to true, this makes "git clean" a no-op, preventing you + from losing files by typing "git clean" when you meant to + say "make clean". You can still say "git clean -f" to + override this. + + - "git log" family of commands learned --date={local,relative,default} + option. --date=relative is synonym to the --relative-date. + --date=local gives the timestamp in local timezone. + +* Updated behavior of existing commands. + + - When $GIT_COMMITTER_EMAIL or $GIT_AUTHOR_EMAIL is not set + but $EMAIL is set, the latter is used as a substitute. + + - "git diff --stat" shows size of preimage and postimage blobs + for binary contents. Earlier it only said "Bin". + + - "git lost-found" shows stuff that are unreachable except + from reflogs. + + - "git checkout branch^0" now detaches HEAD at the tip commit + on the named branch, instead of just switching to the + branch (use "git checkout branch" to switch to the branch, + as before). + + - "git bisect next" can be used after giving only a bad commit + without giving a good one (this starts bisection half-way to + the root commit). We used to refuse to operate without a + good and a bad commit. + + - "git push", when pushing into more than one repository, does + not stop at the first error. + + - "git archive" does not insist you to give --format parameter + anymore; it defaults to "tar". + + - "git cvsserver" can use backends other than sqlite. + + - "gitview" (in contrib/ section) learned to better support + "git-annotate". + + - "git diff $commit1:$path2 $commit2:$path2" can now report + mode changes between the two blobs. + + - Local "git fetch" from a repository whose object store is + one of the alternates (e.g. fetching from the origin in a + repository created with "git clone -l -s") avoids + downloading objects unnecessarily. + + - "git blame" uses .mailmap to canonicalize the author name + just like "git shortlog" does. + + - "git pack-objects" pays attention to pack.depth + configuration variable. + + - "git cherry-pick" and "git revert" does not use .msg file in + the working tree to prepare commit message; instead it uses + $GIT_DIR/MERGE_MSG as other commands do. + +* Builds + + - git-p4import has never been installed; now there is an + installation option to do so. + + - gitk and git-gui can be configured out. + + - Generated documentation pages automatically get version + information from GIT_VERSION. + + - Parallel build with "make -j" descending into subdirectory + was fixed. + +* Performance Tweaks + + - Optimized "git-rev-list --bisect" (hence "git-bisect"). + + - Optimized "git-add $path" in a large directory, most of + whose contents are ignored. + + - Optimized "git-diff-tree" for reduced memory footprint. + + - The recursive merge strategy updated a worktree file that + was changed identically in two branches, when one of them + renamed it. We do not do that when there is no rename, so + match that behaviour. This avoids excessive rebuilds. + + - The default pack depth has been increased to 50, as the + recent addition of delta_base_cache makes deeper delta chains + much less expensive to access. Depending on the project, it was + reported that this reduces the resulting pack file by 10% + or so. + + +Fixes since v1.5.1 +------------------ + +All of the fixes in v1.5.1 maintenance series are included in +this release, unless otherwise noted. + +* Bugfixes + + - Switching branches with "git checkout" refused to work when + a path changes from a file to a directory between the + current branch and the new branch, in order not to lose + possible local changes in the directory that is being turned + into a file with the switch. We now allow such a branch + switch after making sure that there is no locally modified + file nor un-ignored file in the directory. This has not + been backported to 1.5.1.x series, as it is rather an + intrusive change. + + - Merging branches that have a file in one and a directory in + another at the same path used to get quite confused. We + handle such a case a bit more carefully, even though that is + still left as a conflict for the user to sort out. This + will not be backported to 1.5.1.x series, as it is rather an + intrusive change. + + - git-fetch had trouble with a remote with insanely large number + of refs. + + - "git clean -d -X" now does not remove non-excluded directories. + + - rebasing (without -m) a series that changes a symlink to a directory + in the middle of a path confused git-apply greatly and refused to + operate. diff --git a/Documentation/RelNotes/1.5.3.1.txt b/Documentation/RelNotes/1.5.3.1.txt new file mode 100644 index 0000000000..7ff546c743 --- /dev/null +++ b/Documentation/RelNotes/1.5.3.1.txt @@ -0,0 +1,10 @@ +GIT v1.5.3.1 Release Notes +========================== + +Fixes since v1.5.3 +------------------ + +This is solely to fix the generated RPM's dependencies. We used +to have git-p4 package but we do not anymore. As suggested on +the mailing list, this release makes git-core "Obsolete" git-p4, +so that yum update would not complain. diff --git a/Documentation/RelNotes/1.5.3.2.txt b/Documentation/RelNotes/1.5.3.2.txt new file mode 100644 index 0000000000..4bbde3cab4 --- /dev/null +++ b/Documentation/RelNotes/1.5.3.2.txt @@ -0,0 +1,58 @@ +GIT v1.5.3.2 Release Notes +========================== + +Fixes since v1.5.3.1 +-------------------- + + * git-push sent thin packs by default, which was not good for + the public distribution server (no point in saving transfer + while pushing; no point in making the resulting pack less + optimum). + + * git-svn sometimes terminated with "Malformed network data" when + talking over svn:// protocol. + + * git-send-email re-issued the same message-id about 10% of the + time if you fired off 30 messages within a single second. + + * git-stash was not terminating the log message of commits it + internally creates with LF. + + * git-apply failed to check the size of the patch hunk when its + beginning part matched the remainder of the preimage exactly, + even though the preimage recorded in the hunk was much larger + (therefore the patch should not have applied), leading to a + segfault. + + * "git rm foo && git commit foo" complained that 'foo' needs to + be added first, instead of committing the removal, which was a + nonsense. + + * git grep -c said "/dev/null: 0". + + * git-add -u failed to recognize a blob whose type changed + between the index and the work tree. + + * The limit to rename detection has been tightened a lot to + reduce performance problems with a huge change. + + * cvsimport and svnimport barfed when the input tried to move + a tag. + + * "git apply -pN" did not chop the right number of directories. + + * "git svnimport" did not like SVN tags with funny characters in them. + + * git-gui 0.8.3, with assorted fixes, including: + + - font-chooser on X11 was unusable with large number of fonts; + - a diff that contained a deleted symlink made it barf; + - an untracked symbolic link to a directory made it fart; + - a file with % in its name made it vomit; + + +Documentation updates +--------------------- + +User manual has been somewhat restructured. I think the new +organization is much easier to read. diff --git a/Documentation/RelNotes/1.5.3.3.txt b/Documentation/RelNotes/1.5.3.3.txt new file mode 100644 index 0000000000..d213846951 --- /dev/null +++ b/Documentation/RelNotes/1.5.3.3.txt @@ -0,0 +1,31 @@ +GIT v1.5.3.3 Release Notes +========================== + +Fixes since v1.5.3.2 +-------------------- + + * git-quiltimport did not like it when a patch described in the + series file does not exist. + + * p4 importer missed executable bit in some cases. + + * The default shell on some FreeBSD did not execute the + argument parsing code correctly and made git unusable. + + * git-svn incorrectly spawned pager even when the user + explicitly asked not to. + + * sample post-receive hook overquoted the envelope sender + value. + + * git-am got confused when the patch contained a change that is + only about type and not contents. + + * git-mergetool did not show our and their version of the + conflicted file when started from a subdirectory of the + project. + + * git-mergetool did not pass correct options when invoking diff3. + + * git-log sometimes invoked underlying "diff" machinery + unnecessarily. diff --git a/Documentation/RelNotes/1.5.3.4.txt b/Documentation/RelNotes/1.5.3.4.txt new file mode 100644 index 0000000000..b04b3a45a5 --- /dev/null +++ b/Documentation/RelNotes/1.5.3.4.txt @@ -0,0 +1,35 @@ +GIT v1.5.3.4 Release Notes +========================== + +Fixes since v1.5.3.3 +-------------------- + + * Change to "git-ls-files" in v1.5.3.3 that was introduced to support + partial commit of removal better had a segfaulting bug, which was + diagnosed and fixed by Keith and Carl. + + * Performance improvements for rename detection has been backported + from the 'master' branch. + + * "git-for-each-ref --format='%(numparent)'" was not working + correctly at all, and --format='%(parent)' was not working for + merge commits. + + * Sample "post-receive-hook" incorrectly sent out push + notification e-mails marked as "From: " the committer of the + commit that happened to be at the tip of the branch that was + pushed, not from the person who pushed. + + * "git-remote" did not exit non-zero status upon error. + + * "git-add -i" did not respond very well to EOF from tty nor + bogus input. + + * "git-rebase -i" squash subcommand incorrectly made the + author of later commit the author of resulting commit, + instead of taking from the first one in the squashed series. + + * "git-stash apply --index" was not documented. + + * autoconfiguration learned that "ar" command is found as "gas" on + some systems. diff --git a/Documentation/RelNotes/1.5.3.5.txt b/Documentation/RelNotes/1.5.3.5.txt new file mode 100644 index 0000000000..7ff1d5d0d1 --- /dev/null +++ b/Documentation/RelNotes/1.5.3.5.txt @@ -0,0 +1,94 @@ +GIT v1.5.3.5 Release Notes +========================== + +Fixes since v1.5.3.4 +-------------------- + + * Comes with git-gui 0.8.4. + + * "git-config" silently ignored options after --list; now it will + error out with a usage message. + + * "git-config --file" failed if the argument used a relative path + as it changed directories before opening the file. + + * "git-config --file" now displays a proper error message if it + cannot read the file specified on the command line. + + * "git-config", "git-diff", "git-apply" failed if run from a + subdirectory with relative GIT_DIR and GIT_WORK_TREE set. + + * "git-blame" crashed if run during a merge conflict. + + * "git-add -i" did not handle single line hunks correctly. + + * "git-rebase -i" and "git-stash apply" failed if external diff + drivers were used for one or more files in a commit. They now + avoid calling the external diff drivers. + + * "git-log --follow" did not work unless diff generation (e.g. -p) + was also requested. + + * "git-log --follow -B" did not work at all. Fixed. + + * "git-log -M -B" did not correctly handle cases of very large files + being renamed and replaced by very small files in the same commit. + + * "git-log" printed extra newlines between commits when a diff + was generated internally (e.g. -S or --follow) but not displayed. + + * "git-push" error message is more helpful when pushing to a + repository with no matching refs and none specified. + + * "git-push" now respects + (force push) on wildcard refspecs, + matching the behavior of git-fetch. + + * "git-filter-branch" now updates the working directory when it + has finished filtering the current branch. + + * "git-instaweb" no longer fails on Mac OS X. + + * "git-cvsexportcommit" didn't always create new parent directories + before trying to create new child directories. Fixed. + + * "git-fetch" printed a scary (but bogus) error message while + fetching a tag that pointed to a tree or blob. The error did + not impact correctness, only user perception. The bogus error + is no longer printed. + + * "git-ls-files --ignored" did not properly descend into non-ignored + directories that themselves contained ignored files if d_type + was not supported by the filesystem. This bug impacted systems + such as AFS. Fixed. + + * Git segfaulted when reading an invalid .gitattributes file. Fixed. + + * post-receive-email example hook was fixed for non-fast-forward + updates. + + * Documentation updates for supported (but previously undocumented) + options of "git-archive" and "git-reflog". + + * "make clean" no longer deletes the configure script that ships + with the git tarball, making multiple architecture builds easier. + + * "git-remote show origin" spewed a warning message from Perl + when no remote is defined for the current branch via + branch..remote configuration settings. + + * Building with NO_PERL_MAKEMAKER excessively rebuilt contents + of perl/ subdirectory by rewriting perl.mak. + + * http.sslVerify configuration settings were not used in scripted + Porcelains. + + * "git-add" leaked a bit of memory while scanning for files to add. + + * A few workarounds to squelch false warnings from recent gcc have + been added. + + * "git-send-pack $remote frotz" segfaulted when there is nothing + named 'frotz' on the local end. + + * "git-rebase --interactive" did not handle its "--strategy" option + properly. diff --git a/Documentation/RelNotes/1.5.3.6.txt b/Documentation/RelNotes/1.5.3.6.txt new file mode 100644 index 0000000000..069a2b2cf9 --- /dev/null +++ b/Documentation/RelNotes/1.5.3.6.txt @@ -0,0 +1,48 @@ +GIT v1.5.3.6 Release Notes +========================== + +Fixes since v1.5.3.5 +-------------------- + + * git-cvsexportcommit handles root commits better. + + * git-svn dcommit used to clobber when sending a series of + patches. + + * git-svn dcommit failed after attempting to rebase when + started with a dirty index; now it stops upfront. + + * git-grep sometimes refused to work when your index was + unmerged. + + * "git-grep -A1 -B2" acted as if it was told to run "git -A1 -B21". + + * git-hash-object did not honor configuration variables, such as + core.compression. + + * git-index-pack choked on a huge pack on 32-bit machines, even when + large file offsets are supported. + + * atom feeds from git-web said "10" for the month of November. + + * a memory leak in commit walker was plugged. + + * When git-send-email inserted the original author's From: + address in body, it did not mark the message with + Content-type: as needed. + + * git-revert and git-cherry-pick incorrectly refused to start + when the work tree was dirty. + + * git-clean did not honor core.excludesfile configuration. + + * git-add mishandled ".gitignore" files when applying them to + subdirectories. + + * While importing a too branchy history, git-fastimport did not + honor delta depth limit properly. + + * Support for zlib implementations that lack ZLIB_VERNUM and definition + of deflateBound() has been added. + + * Quite a lot of documentation clarifications. diff --git a/Documentation/RelNotes/1.5.3.7.txt b/Documentation/RelNotes/1.5.3.7.txt new file mode 100644 index 0000000000..2f690616c8 --- /dev/null +++ b/Documentation/RelNotes/1.5.3.7.txt @@ -0,0 +1,45 @@ +GIT v1.5.3.7 Release Notes +========================== + +Fixes since v1.5.3.6 +-------------------- + + * git-send-email added 8-bit contents to the payload without + marking it as 8-bit in a CTE header. + + * "git-bundle create a.bndl HEAD" dereferenced the symref and + did not record the ref as 'HEAD'; this prevented a bundle + from being used as a normal source of git-clone. + + * The code to reject nonsense command line of the form + "git-commit -a paths..." and "git-commit --interactive + paths..." were broken. + + * Adding a signature that is not ASCII-only to an original + commit that is ASCII-only would make the result non-ASCII. + "git-format-patch -s" did not mark such a message correctly + with MIME encoding header. + + * git-add sometimes did not mark the resulting index entry + stat-clean. This affected only cases when adding the + contents with the same length as the previously staged + contents, and the previous staging made the index entry + "racily clean". + + * git-commit did not honor GIT_INDEX_FILE the user had in the + environment. + + * When checking out a revision, git-checkout did not report where the + updated HEAD is if you happened to have a file called HEAD in the + work tree. + + * "git-rev-list --objects" mishandled a tree that points at a + submodule. + + * "git cvsimport" was not ready for packed refs that "git gc" can + produce and gave incorrect results. + + * Many scripted Porcelains were confused when you happened to have a + file called "HEAD" in your work tree. + +Also it contains updates to the user manual and documentation. diff --git a/Documentation/RelNotes/1.5.3.8.txt b/Documentation/RelNotes/1.5.3.8.txt new file mode 100644 index 0000000000..0e3ff58a46 --- /dev/null +++ b/Documentation/RelNotes/1.5.3.8.txt @@ -0,0 +1,25 @@ +GIT v1.5.3.8 Release Notes +========================== + +Fixes since v1.5.3.7 +-------------------- + + * Some documentation used "email.com" as an example domain. + + * git-svn fix to handle funky branch and project names going over + http/https correctly. + + * git-svn fix to tone down a needlessly alarming warning message. + + * git-clone did not correctly report errors while fetching over http. + + * git-send-email added redundant Message-Id: header to the outgoing + e-mail when the patch text already had one. + + * a read-beyond-end-of-buffer bug in configuration file updater was fixed. + + * git-grep used to show the same hit repeatedly for unmerged paths. + + * After amending the patch title in "git-am -i", the command did not + report the patch it applied with the updated title. + diff --git a/Documentation/RelNotes/1.5.3.txt b/Documentation/RelNotes/1.5.3.txt new file mode 100644 index 0000000000..0668d3c0ca --- /dev/null +++ b/Documentation/RelNotes/1.5.3.txt @@ -0,0 +1,366 @@ +GIT v1.5.3 Release Notes +======================== + +Updates since v1.5.2 +-------------------- + +* The commit walkers other than http are officially deprecated, + but still supported for now. + +* The submodule support has Porcelain layer. + + Note that the current submodule support is minimal and this is + deliberately so. A design decision we made is that operations + at the supermodule level do not recurse into submodules by + default. The expectation is that later we would add a + mechanism to tell git which submodules the user is interested + in, and this information might be used to determine the + recursive behaviour of certain commands (e.g. "git checkout" + and "git diff"), but currently we haven't agreed on what that + mechanism should look like. Therefore, if you use submodules, + you would probably need "git submodule update" on the + submodules you care about after running a "git checkout" at + the supermodule level. + +* There are a handful pack-objects changes to help you cope better + with repositories with pathologically large blobs in them. + +* For people who need to import from Perforce, a front-end for + fast-import is in contrib/fast-import/. + +* Comes with git-gui 0.8.2. + +* Comes with updated gitk. + +* New commands and options. + + - "git log --date=" can use more formats: iso8601, rfc2822. + + - The hunk header output from "git diff" family can be customized + with the attributes mechanism. See gitattributes(5) for details. + + - "git stash" allows you to quickly save away your work in + progress and replay it later on an updated state. + + - "git rebase" learned an "interactive" mode that let you + pick and reorder which commits to rebuild. + + - "git fsck" can save its findings in $GIT_DIR/lost-found, without a + separate invocation of "git lost-found" command. The blobs stored by + lost-found are stored in plain format to allow you to grep in them. + + - $GIT_WORK_TREE environment variable can be used together with + $GIT_DIR to work in a subdirectory of a working tree that is + not located at "$GIT_DIR/..". + + - Giving "--file=" option to "git config" is the same as + running the command with GIT_CONFIG= environment. + + - "git log" learned a new option "--follow", to follow + renaming history of a single file. + + - "git filter-branch" lets you rewrite the revision history of + specified branches. You can specify a number of filters to + modify the commits, files and trees. + + - "git cvsserver" learned new options (--base-path, --export-all, + --strict-paths) inspired by "git daemon". + + - "git daemon --base-path-relaxed" can help migrating a repository URL + that did not use to use --base-path to use --base-path. + + - "git commit" can use "-t templatefile" option and commit.template + configuration variable to prime the commit message given to you in the + editor. + + - "git submodule" command helps you manage the projects from + the superproject that contain them. + + - In addition to core.compression configuration option, + core.loosecompression and pack.compression options can + independently tweak zlib compression levels used for loose + and packed objects. + + - "git ls-tree -l" shows size of blobs pointed at by the + tree entries, similar to "/bin/ls -l". + + - "git rev-list" learned --regexp-ignore-case and + --extended-regexp options to tweak its matching logic used + for --grep filtering. + + - "git describe --contains" is a handier way to call more + obscure command "git name-rev --tags". + + - "git gc --aggressive" tells the command to spend more cycles + to optimize the repository harder. + + - "git repack" learned a "window-memory" limit which + dynamically reduces the window size to stay within the + specified memory usage. + + - "git repack" can be told to split resulting packs to avoid + exceeding limit specified with "--max-pack-size". + + - "git fsck" gained --verbose option. This is really really + verbose but it might help you identify exact commit that is + corrupt in your repository. + + - "git format-patch" learned --numbered-files option. This + may be useful for MH users. + + - "git format-patch" learned format.subjectprefix configuration + variable, which serves the same purpose as "--subject-prefix" + option. + + - "git tag -n -l" shows tag annotations while listing tags. + + - "git cvsimport" can optionally use the separate-remote layout. + + - "git blame" can be told to see through commits that change + whitespaces and indentation levels with "-w" option. + + - "git send-email" can be told not to thread the messages when + sending out more than one patches. + + - "git send-email" can also be told how to find whom to cc the + message to for each message via --cc-cmd. + + - "git config" learned NUL terminated output format via -z to + help scripts. + + - "git add" learned "--refresh ..." option to selectively refresh + the cached stat information. + + - "git init -q" makes the command quieter. + + - "git -p command" now has a cousin of opposite sex, "git --no-pager + command". + +* Updated behavior of existing commands. + + - "gitweb" can offer multiple snapshot formats. + + ***NOTE*** Unfortunately, this changes the format of the + $feature{snapshot}{default} entry in the per-site + configuration file 'gitweb_config.perl'. It used to be a + three-element tuple that describe a single format; with the + new configuration item format, you only have to say the name + of the format ('tgz', 'tbz2' or 'zip'). Please update the + your configuration file accordingly. + + - "git clone" uses -l (hardlink files under .git) by default when + cloning locally. + + - URL used for "git clone" and friends can specify nonstandard SSH port + by using ssh://host:port/path/to/repo syntax. + + - "git bundle create" can now create a bundle without negative refs, + i.e. "everything since the beginning up to certain points". + + - "git diff" (but not the plumbing level "git diff-tree") now + recursively descends into trees by default. + + - "git diff" does not show differences that come only from + stat-dirtiness in the form of "diff --git" header anymore. + It runs "update-index --refresh" silently as needed. + + - "git tag -l" used to match tags by globbing its parameter as if it + has wildcard '*' on both ends, which made "git tag -l gui" to match + tag 'gitgui-0.7.0'; this was very annoying. You now have to add + asterisk on the sides you want to wildcard yourself. + + - The editor to use with many interactive commands can be + overridden with GIT_EDITOR environment variable, or if it + does not exist, with core.editor configuration variable. As + before, if you have neither, environment variables VISUAL + and EDITOR are consulted in this order, and then finally we + fall back on "vi". + + - "git rm --cached" does not complain when removing a newly + added file from the index anymore. + + - Options to "git log" to affect how --grep/--author options look for + given strings now have shorter abbreviations. -i is for ignore case, + and -E is for extended regexp. + + - "git log" learned --log-size to show the number of bytes in + the log message part of the output to help qgit. + + - "git log --name-status" does not require you to give "-r" anymore. + As a general rule, Porcelain commands should recurse when showing + diff. + + - "git format-patch --root A" can be used to format everything + since the beginning up to A. This was supported with + "git format-patch --root A A" for a long time, but was not + properly documented. + + - "git svn dcommit" retains local merge information. + + - "git svnimport" allows an empty string to be specified as the + trunk/ directory. This is necessary to suck data from a SVN + repository that doe not have trunk/ branches/ and tags/ organization + at all. + + - "git config" to set values also honors type flags like --bool + and --int. + + - core.quotepath configuration can be used to make textual git + output to emit most of the characters in the path literally. + + - "git mergetool" chooses its backend more wisely, taking + notice of its environment such as use of X, Gnome/KDE, etc. + + - "gitweb" shows merge commits a lot nicer than before. The + default view uses more compact --cc format, while the UI + allows to choose normal diff with any parent. + + - snapshot files "gitweb" creates from a repository at + $path/$project/.git are more useful. We use $project part + in the filename, which we used to discard. + + - "git cvsimport" creates lightweight tags; there is no + interesting information we can record in an annotated tag, + and the handcrafted ones the old code created was not + properly formed anyway. + + - "git push" pretends that you immediately fetched back from + the remote by updating corresponding remote tracking + branches if you have any. + + - The diffstat given after a merge (or a pull) honors the + color.diff configuration. + + - "git commit --amend" is now compatible with various message source + options such as -m/-C/-c/-F. + + - "git apply --whitespace=strip" removes blank lines added at + the end of the file. + + - "git fetch" over git native protocols with "-v" option shows + connection status, and the IP address of the other end, to + help diagnosing problems. + + - We used to have core.legacyheaders configuration, when + set to false, allowed git to write loose objects in a format + that mimics the format used by objects stored in packs. It + turns out that this was not so useful. Although we will + continue to read objects written in that format, we do not + honor that configuration anymore and create loose objects in + the legacy/traditional format. + + - "--find-copies-harder" option to diff family can now be + spelled as "-C -C" for brevity. + + - "git mailsplit" (hence "git am") can read from Maildir + formatted mailboxes. + + - "git cvsserver" does not barf upon seeing "cvs login" + request. + + - "pack-objects" honors "delta" attribute set in + .gitattributes. It does not attempt to deltify blobs that + come from paths with delta attribute set to false. + + - "new-workdir" script (in contrib) can now be used with a + bare repository. + + - "git mergetool" learned to use gvimdiff. + + - "gitview" (in contrib) has a better blame interface. + + - "git log" and friends did not handle a commit log message + that is larger than 16kB; they do now. + + - "--pretty=oneline" output format for "git log" and friends + deals with "malformed" commit log messages that have more + than one lines in the first paragraph better. We used to + show the first line, cutting the title at mid-sentence; we + concatenate them into a single line and treat the result as + "oneline". + + - "git p4import" has been demoted to contrib status. For + a superior option, checkout the "git p4" front end to + "git fast-import" (also in contrib). The man page and p4 + rpm have been removed as well. + + - "git mailinfo" (hence "am") now tries to see if the message + is in utf-8 first, instead of assuming iso-8859-1, if + incoming e-mail does not say what encoding it is in. + +* Builds + + - old-style function definitions (most notably, a function + without parameter defined with "func()", not "func(void)") + have been eradicated. + + - "git tag" and "git verify-tag" have been rewritten in C. + +* Performance Tweaks + + - "git pack-objects" avoids re-deltification cost by caching + small enough delta results it creates while looking for the + best delta candidates. + + - "git pack-objects" learned a new heuristic to prefer delta + that is shallower in depth over the smallest delta + possible. This improves both overall packfile access + performance and packfile density. + + - diff-delta code that is used for packing has been improved + to work better on big files. + + - when there are more than one pack files in the repository, + the runtime used to try finding an object always from the + newest packfile; it now tries the same packfile as we found + the object requested the last time, which exploits the + locality of references. + + - verifying pack contents done by "git fsck --full" got boost + by carefully choosing the order to verify objects in them. + + - "git read-tree -m" to read into an already populated index + has been optimized vastly. The effect of this can be seen + when switching branches that have differences in only a + handful paths. + + - "git add paths..." and "git commit paths..." has also been + heavily optimized. + +Fixes since v1.5.2 +------------------ + +All of the fixes in v1.5.2 maintenance series are included in +this release, unless otherwise noted. + +* Bugfixes + + - "gitweb" had trouble handling non UTF-8 text with older + Encode.pm Perl module. + + - "git svn" misparsed the data from the commits in the repository when + the user had "color.diff = true" in the configuration. This has been + fixed. + + - There was a case where "git svn dcommit" clobbered changes made on the + SVN side while committing multiple changes. + + - "git-write-tree" had a bad interaction with racy-git avoidance and + gitattributes mechanisms. + + - "git --bare command" overrode existing GIT_DIR setting and always + made it treat the current working directory as GIT_DIR. + + - "git ls-files --error-unmatch" does not complain if you give the + same path pattern twice by mistake. + + - "git init" autodetected core.filemode but not core.symlinks, which + made a new directory created automatically by "git clone" cumbersome + to use on filesystems that require these configurations to be set. + + - "git log" family of commands behaved differently when run as "git + log" (no pathspec) and as "git log --" (again, no pathspec). This + inconsistency was introduced somewhere in v1.3.0 series but now has + been corrected. + + - "git rebase -m" incorrectly displayed commits that were skipped. diff --git a/Documentation/RelNotes/1.5.4.1.txt b/Documentation/RelNotes/1.5.4.1.txt new file mode 100644 index 0000000000..d4e44b8b09 --- /dev/null +++ b/Documentation/RelNotes/1.5.4.1.txt @@ -0,0 +1,17 @@ +GIT v1.5.4.1 Release Notes +========================== + +Fixes since v1.5.4 +------------------ + + * "git-commit -C $tag" used to work but rewrite in C done in + 1.5.4 broke it. + + * An entry in the .gitattributes file that names a pattern in a + subdirectory of the directory it is in did not match + correctly (e.g. pattern "b/*.c" in "a/.gitattributes" should + match "a/b/foo.c" but it didn't). + + * Customized color specification was parsed incorrectly when + numeric color values are used. This was fixed in 1.5.4.1. + diff --git a/Documentation/RelNotes/1.5.4.2.txt b/Documentation/RelNotes/1.5.4.2.txt new file mode 100644 index 0000000000..21d0df59fb --- /dev/null +++ b/Documentation/RelNotes/1.5.4.2.txt @@ -0,0 +1,43 @@ +GIT v1.5.4.2 Release Notes +========================== + +Fixes since v1.5.4 +------------------ + + * The configuration parser was not prepared to see string + valued variables misspelled as boolean and segfaulted. + + * Temporary files left behind due to interrupted object + transfers were not cleaned up with "git prune". + + * "git config --unset" was confused when the unset variables + were spelled with continuation lines in the config file. + + * The merge message detection in "git cvsimport" did not catch + a message that began with "Merge...". + + * "git status" suggests "git rm --cached" for unstaging the + earlier "git add" before the initial commit. + + * "git status" output was incorrect during a partial commit. + + * "git bisect" refused to start when the HEAD was detached. + + * "git bisect" allowed a wildcard character in the commit + message expanded while writing its log file. + + * Manual pages were not formatted correctly with docbook xsl + 1.72; added a workaround. + + * "git-commit -C $tag" used to work but rewrite in C done in + 1.5.4 broke it. This was fixed in 1.5.4.1. + + * An entry in the .gitattributes file that names a pattern in a + subdirectory of the directory it is in did not match + correctly (e.g. pattern "b/*.c" in "a/.gitattributes" should + match "a/b/foo.c" but it didn't). This was fixed in 1.5.4.1. + + * Customized color specification was parsed incorrectly when + numeric color values are used. This was fixed in 1.5.4.1. + + * http transport misbehaved when linked with curl-gnutls. diff --git a/Documentation/RelNotes/1.5.4.3.txt b/Documentation/RelNotes/1.5.4.3.txt new file mode 100644 index 0000000000..b0fc67fb2a --- /dev/null +++ b/Documentation/RelNotes/1.5.4.3.txt @@ -0,0 +1,27 @@ +GIT v1.5.4.3 Release Notes +========================== + +Fixes since v1.5.4.2 +-------------------- + + * RPM spec used to pull in everything with 'git'. This has been + changed so that 'git' package contains just the core parts, + and we now supply 'git-all' metapackage to slurp in everything. + This should match end user's expectation better. + + * When some refs failed to update, git-push reported "failure" + which was unclear if some other refs were updated or all of + them failed atomically (the answer is the former). Reworded + the message to clarify this. + + * "git clone" from a repository whose HEAD was misconfigured + did not set up the remote properly. Now it tries to do + better. + + * Updated git-push documentation to clarify what "matching" + means, in order to reduce user confusion. + + * Updated git-add documentation to clarify "add -u" operates in + the current subdirectory you are in, just like other commands. + + * git-gui updates to work on OSX and Windows better. diff --git a/Documentation/RelNotes/1.5.4.4.txt b/Documentation/RelNotes/1.5.4.4.txt new file mode 100644 index 0000000000..323c1a88c7 --- /dev/null +++ b/Documentation/RelNotes/1.5.4.4.txt @@ -0,0 +1,66 @@ +GIT v1.5.4.4 Release Notes +========================== + +Fixes since v1.5.4.3 +-------------------- + + * Building and installing with an overtight umask such as 077 made + installed templates unreadable by others, while the rest of the install + are done in a way that is friendly to umask 022. + + * "git cvsexportcommit -w $cvsdir" misbehaved when GIT_DIR is set to a + relative directory. + + * "git http-push" had an invalid memory access that could lead it to + segfault. + + * When "git rebase -i" gave control back to the user for a commit that is + marked to be edited, it just said "modify it with commit --amend", + without saying what to do to continue after modifying it. Give an + explicit instruction to run "rebase --continue" to be more helpful. + + * "git send-email" in 1.5.4.3 issued a bogus empty In-Reply-To: header. + + * "git bisect" showed mysterious "won't bisect on seeked tree" error message. + This was leftover from Cogito days to prevent "bisect" starting from a + cg-seeked state. We still keep the Cogito safety, but running "git bisect + start" when another bisect was in effect will clean up and start over. + + * "git push" with an explicit PATH to receive-pack did not quite work if + receive-pack was not on usual PATH. We earlier fixed the same issue + with "git fetch" and upload-pack, but somehow forgot to do so in the + other direction. + + * git-gui's info dialog was not displayed correctly when the user tries + to commit nothing (i.e. without staging anything). + + * "git revert" did not properly fail when attempting to run with a + dirty index. + + * "git merge --no-commit --no-ff " incorrectly made commits. + + * "git merge --squash --no-ff ", which is a nonsense combination + of options, was not rejected. + + * "git ls-remote" and "git remote show" against an empty repository + failed, instead of just giving an empty result (regression). + + * "git fast-import" did not handle a renamed path whose name needs to be + quoted, due to a bug in unquote_c_style() function. + + * "git cvsexportcommit" was confused when multiple files with the same + basename needed to be pushed out in the same commit. + + * "git daemon" did not send early errors to syslog. + + * "git log --merge" did not work well with --left-right option. + + * "git svn" prompted for client cert password every time it accessed the + server. + + * The reset command in "git fast-import" data stream was documented to + end with an optional LF, but it actually required one. + + * "git svn dcommit/rebase" did not honor --rewrite-root option. + +Also included are a handful documentation updates. diff --git a/Documentation/RelNotes/1.5.4.5.txt b/Documentation/RelNotes/1.5.4.5.txt new file mode 100644 index 0000000000..bbd130e36d --- /dev/null +++ b/Documentation/RelNotes/1.5.4.5.txt @@ -0,0 +1,56 @@ +GIT v1.5.4.5 Release Notes +========================== + +Fixes since v1.5.4.4 +-------------------- + + * "git fetch there" when the URL information came from the Cogito style + branches/there file did not update refs/heads/there (regression in + 1.5.4). + + * Bogus refspec configuration such as "remote.there.fetch = =" were not + detected as errors (regression in 1.5.4). + + * You couldn't specify a custom editor whose path contains a whitespace + via GIT_EDITOR (and core.editor). + + * The subdirectory filter to "git filter-branch" mishandled a history + where the subdirectory becomes empty and then later becomes non-empty. + + * "git shortlog" gave an empty line if the original commit message was + malformed (e.g. a botched import from foreign SCM). Now it finds the + first non-empty line and uses it for better information. + + * When the user fails to give a revision parameter to "git svn", an error + from the Perl interpreter was issued because the script lacked proper + error checking. + + * After "git rebase" stopped due to conflicts, if the user played with + "git reset" and friends, "git rebase --abort" failed to go back to the + correct commit. + + * Additional work trees prepared with git-new-workdir (in contrib/) did + not share git-svn metadata directory .git/svn with the original. + + * "git-merge-recursive" did not mark addition of the same path with + different filemodes correctly as a conflict. + + * "gitweb" gave malformed URL when pathinfo stype paths are in use. + + * "-n" stands for "--no-tags" again for "git fetch". + + * "git format-patch" did not detect the need to add 8-bit MIME header + when the user used format.header configuration. + + * "rev~" revision specifier used to mean "rev", which was inconsistent + with how "rev^" worked. Now "rev~" is the same as "rev~1" (hence it + also is the same as "rev^1"), and "rev~0" is the same as "rev^0" + (i.e. it has to be a commit). + + * "git quiltimport" did not grok empty lines, lines in "file -pNNN" + format to specify the prefix levels and lines with trailing comments. + + * "git rebase -m" triggered pre-commit verification, which made + "rebase --continue" impossible. + +As usual, it also comes with many documentation fixes and clarifications. diff --git a/Documentation/RelNotes/1.5.4.6.txt b/Documentation/RelNotes/1.5.4.6.txt new file mode 100644 index 0000000000..3e3c3e55a3 --- /dev/null +++ b/Documentation/RelNotes/1.5.4.6.txt @@ -0,0 +1,43 @@ +GIT v1.5.4.6 Release Notes +========================== + +I personally do not think there is any reason anybody should want to +run v1.5.4.X series these days, because 'master' version is always +more stable than any tagged released version of git. + +This is primarily to futureproof "git-shell" to accept requests +without a dash between "git" and subcommand name (e.g. "git +upload-pack") which the newer client will start to make sometime in +the future. + +Fixes since v1.5.4.5 +-------------------- + + * Command line option "-n" to "git-repack" was not correctly parsed. + + * Error messages from "git-apply" when the patchfile cannot be opened + have been improved. + + * Error messages from "git-bisect" when given nonsense revisions have + been improved. + + * reflog syntax that uses time e.g. "HEAD@{10 seconds ago}:path" did not + stop parsing at the closing "}". + + * "git rev-parse --symbolic-full-name ^master^2" printed solitary "^", + but it should print nothing. + + * "git apply" did not enforce "match at the beginning" correctly. + + * a path specification "a/b" in .gitattributes file should not match + "sub/a/b", but it did. + + * "git log --date-order --topo-order" did not override the earlier + date-order with topo-order as expected. + + * "git fast-export" did not export octopus merges correctly. + + * "git archive --prefix=$path/" mishandled gitattributes. + +As usual, it also comes with many documentation fixes and clarifications. + diff --git a/Documentation/RelNotes/1.5.4.7.txt b/Documentation/RelNotes/1.5.4.7.txt new file mode 100644 index 0000000000..9065a0e273 --- /dev/null +++ b/Documentation/RelNotes/1.5.4.7.txt @@ -0,0 +1,10 @@ +GIT v1.5.4.7 Release Notes +========================== + +Fixes since 1.5.4.7 +------------------- + + * Removed support for an obsolete gitweb request URI, whose + implementation ran "git diff" Porcelain, instead of using plumbing, + which would have run an external diff command specified in the + repository configuration as the gitweb user. diff --git a/Documentation/RelNotes/1.5.4.txt b/Documentation/RelNotes/1.5.4.txt new file mode 100644 index 0000000000..f1323b6174 --- /dev/null +++ b/Documentation/RelNotes/1.5.4.txt @@ -0,0 +1,377 @@ +GIT v1.5.4 Release Notes +======================== + +Removal +------- + + * "git svnimport" was removed in favor of "git svn". It is still there + in the source tree (contrib/examples) but unsupported. + + * As git-commit and git-status have been rewritten, "git runstatus" + helper script lost all its users and has been removed. + + +Temporarily disabled +-------------------- + + * "git http-push" is known not to work well with cURL library older + than 7.16, and we had reports of repository corruption. It is + disabled on such platforms for now. Unfortunately, 1.5.3.8 shares + the same issue. In other words, this does not mean you will be + fine if you stick to an older git release. For now, please do not + use http-push from older git with cURL older than 7.16 if you + value your data. A proper fix will hopefully materialize in + later versions. + + +Deprecation notices +------------------- + + * From v1.6.0, git will by default install dashed form of commands + (e.g. "git-commit") outside of users' normal $PATH, and will install + only selected commands ("git" itself, and "gitk") in $PATH. This + implies: + + - Using dashed forms of git commands (e.g. "git-commit") from the + command line has been informally deprecated since early 2006, but + now it officially is, and will be removed in the future. Use + dash-less forms (e.g. "git commit") instead. + + - Using dashed forms from your scripts, without first prepending the + return value from "git --exec-path" to the scripts' PATH, has been + informally deprecated since early 2006, but now it officially is. + + - Use of dashed forms with "PATH=$(git --exec-path):$PATH; export + PATH" early in your script is not deprecated with this change. + + Users are strongly encouraged to adjust their habits and scripts now + to prepare for this change. + + * The post-receive hook was introduced in March 2007 to supersede + the post-update hook, primarily to overcome the command line length + limitation of the latter. Use of post-update hook will be deprecated + in future versions of git, starting from v1.6.0. + + * "git lost-found" was deprecated in favor of "git fsck"'s --lost-found + option, and will be removed in the future. + + * "git peek-remote" is deprecated, as "git ls-remote" was written in C + and works for all transports; "git peek-remote" will be removed in + the future. + + * "git repo-config" which was an old name for "git config" command + has been supported without being advertised for a long time. The + next feature release will remove it. + + * From v1.6.0, the repack.usedeltabaseoffset config option will default + to true, which will give denser packfiles (i.e. more efficient storage). + The downside is that git older than version 1.4.4 will not be able + to directly use a repository packed using this setting. + + * From v1.6.0, the pack.indexversion config option will default to 2, + which is slightly more efficient, and makes repacking more immune to + data corruptions. Git older than version 1.5.2 may revert to version 1 + of the pack index with a manual "git index-pack" to be able to directly + access corresponding pack files. + + +Updates since v1.5.3 +-------------------- + + * Comes with much improved gitk, with i18n. + + * Comes with git-gui 0.9.2 with i18n. + + * gitk is now merged as a subdirectory of git.git project, in + preparation for its i18n. + + * progress displays from many commands are a lot nicer to the eye. + Transfer commands show throughput data. + + * many commands that pay attention to per-directory .gitignore now do + so lazily, which makes the usual case go much faster. + + * Output processing for '--pretty=format:' has been + optimized. + + * Rename detection of diff family while detecting exact matches has + been greatly optimized. + + * Rename detection of diff family tries to make more natural looking + pairing. Earlier, if multiple identical rename sources were + found in the preimage, the source used was picked pretty much at random. + + * Value "true" for color.diff and color.status configuration used to + mean "always" (even when the output is not going to a terminal). + This has been corrected to mean the same thing as "auto". + + * "git diff" Porcelain now respects diff.external configuration, which + is another way to specify GIT_EXTERNAL_DIFF. + + * "git diff" can be told to use different prefixes other than + "a/" and "b/" e.g. "git diff --src-prefix=l/ --dst-prefix=k/". + + * "git diff" sometimes did not quote paths with funny + characters properly. + + * "git log" (and any revision traversal commands) misbehaved + when --diff-filter is given but was not asked to actually + produce diff. + + * HTTP proxy can be specified per remote repository using + remote.*.httpproxy configuration, or global http.proxy configuration + variable. + + * Various Perforce importer updates. + + * Example update and post-receive hooks have been improved. + + * Any command that wants to take a commit object name can now use + ":/string" syntax to name a commit. + + * "git reset" is now built-in and its output can be squelched with -q. + + * "git reset --hard" does not make any sense in a bare + repository, but did not error out; fixed. + + * "git send-email" can optionally talk over ssmtp and use SMTP-AUTH. + + * "git rebase" learned --whitespace option. + + * In "git rebase", when you decide not to replay a particular change + after the command stopped with a conflict, you can say "git rebase + --skip" without first running "git reset --hard", as the command now + runs it for you. + + * "git rebase --interactive" mode can now work on detached HEAD. + + * Other minor to serious bugs in "git rebase -i" have been fixed. + + * "git rebase" now detaches head during its operation, so after a + successful "git rebase" operation, the reflog entry branch@{1} for + the current branch points at the commit before the rebase was + started. + + * "git rebase -i" also triggers rerere to help your repeated merges. + + * "git merge" can call the "post-merge" hook. + + * "git pack-objects" can optionally run deltification with multiple + threads. + + * "git archive" can optionally substitute keywords in files marked with + export-subst attribute. + + * "git cherry-pick" made a misguided attempt to repeat the original + command line in the generated log message, when told to cherry-pick a + commit by naming a tag that points at it. It does not anymore. + + * "git for-each-ref" learned %(xxxdate:) syntax to show the + various date fields in different formats. + + * "git gc --auto" is a low-impact way to automatically run a variant of + "git repack" that does not lose unreferenced objects (read: safer + than the usual one) after the user accumulates too many loose + objects. + + * "git clean" has been rewritten in C. + + * You need to explicitly set clean.requireForce to "false" to allow + "git clean" without -f to do any damage (lack of the configuration + variable used to mean "do not require -f option to lose untracked + files", but we now use the safer default). + + * The kinds of whitespace errors "git diff" and "git apply" notice (and + fix) can be controlled via 'core.whitespace' configuration variable + and 'whitespace' attribute in .gitattributes file. + + * "git push" learned --dry-run option to show what would happen if a + push is run. + + * "git push" does not update a tracking ref on the local side when the + remote refused to update the corresponding ref. + + * "git push" learned --mirror option. This is to push the local refs + one-to-one to the remote, and deletes refs from the remote that do + not exist anymore in the repository on the pushing side. + + * "git push" can remove a corrupt ref at the remote site with the usual + ":ref" refspec. + + * "git remote" knows --mirror mode. This is to set up configuration to + push into a remote repository to store local branch heads to the same + branch on the remote side, and remove branch heads locally removed + from local repository at the same time. Suitable for pushing into a + back-up repository. + + * "git remote" learned "rm" subcommand. + + * "git cvsserver" can be run via "git shell". Also, "cvs" is + recognized as a synonym for "git cvsserver", so that CVS users + can be switched to git just by changing their login shell. + + * "git cvsserver" acts more like receive-pack by running post-receive + and post-update hooks. + + * "git am" and "git rebase" are far less verbose. + + * "git pull" learned to pass --[no-]ff option to underlying "git + merge". + + * "git pull --rebase" is a different way to integrate what you fetched + into your current branch. + + * "git fast-export" produces data-stream that can be fed to fast-import + to reproduce the history recorded in a git repository. + + * "git add -i" takes pathspecs to limit the set of files to work on. + + * "git add -p" is a short-hand to go directly to the selective patch + subcommand in the interactive command loop and to exit when done. + + * "git add -i" UI has been colorized. The interactive prompt + and menu can be colored by setting color.interactive + configuration. The diff output (including the hunk picker) + are colored with color.diff configuration. + + * "git commit --allow-empty" allows you to create a single-parent + commit that records the same tree as its parent, overriding the usual + safety valve. + + * "git commit --amend" can amend a merge that does not change the tree + from its first parent. + + * "git commit" used to unconditionally strip comment lines that + began with '#' and removed excess blank lines. This behavior has + been made configurable. + + * "git commit" has been rewritten in C. + + * "git stash random-text" does not create a new stash anymore. It was + a UI mistake. Use "git stash save random-text", or "git stash" + (without extra args) for that. + + * "git stash clear extra-text" does not clear the whole stash + anymore. It is tempting to expect "git stash clear stash@{2}" + to drop only a single named stash entry, and it is rude to + discard everything when that is asked (but not provided). + + * "git prune --expire