mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-06-11 20:25:32 +03:00
treewide: format all inactive Nix files
After final improvements to the official formatter implementation, this commit now performs the first treewide reformat of Nix files using it. This is part of the implementation of RFC 166. Only "inactive" files are reformatted, meaning only files that aren't being touched by any PR with activity in the past 2 months. This is to avoid conflicts for PRs that might soon be merged. Later we can do a full treewide reformat to get the rest, which should not cause as many conflicts. A CI check has already been running for some time to ensure that new and already-formatted files are formatted, so the files being reformatted here should also stay formatted. This commit was automatically created and can be verified using nix-builda08b3a4d19
.tar.gz \ --argstr baseRevb32a094368
result/bin/apply-formatting $NIXPKGS_PATH
This commit is contained in:
parent
b32a094368
commit
4f0dadbf38
21293 changed files with 701351 additions and 428307 deletions
266
lib/sources.nix
266
lib/sources.nix
|
@ -1,4 +1,4 @@
|
|||
/* Functions for copying sources to the Nix store. */
|
||||
# Functions for copying sources to the Nix store.
|
||||
{ lib }:
|
||||
|
||||
# Tested in lib/tests/sources.sh
|
||||
|
@ -23,22 +23,34 @@ let
|
|||
directories of version control system, backup files (*~)
|
||||
and some generated files.
|
||||
*/
|
||||
cleanSourceFilter = name: type: let baseName = baseNameOf (toString name); in ! (
|
||||
# Filter out version control software files/directories
|
||||
(baseName == ".git" || type == "directory" && (baseName == ".svn" || baseName == "CVS" || baseName == ".hg")) ||
|
||||
# Filter out editor backup / swap files.
|
||||
lib.hasSuffix "~" baseName ||
|
||||
match "^\\.sw[a-z]$" baseName != null ||
|
||||
match "^\\..*\\.sw[a-z]$" baseName != null ||
|
||||
cleanSourceFilter =
|
||||
name: type:
|
||||
let
|
||||
baseName = baseNameOf (toString name);
|
||||
in
|
||||
!(
|
||||
# Filter out version control software files/directories
|
||||
(
|
||||
baseName == ".git"
|
||||
|| type == "directory" && (baseName == ".svn" || baseName == "CVS" || baseName == ".hg")
|
||||
)
|
||||
||
|
||||
# Filter out editor backup / swap files.
|
||||
lib.hasSuffix "~" baseName
|
||||
|| match "^\\.sw[a-z]$" baseName != null
|
||||
|| match "^\\..*\\.sw[a-z]$" baseName != null
|
||||
||
|
||||
|
||||
# Filter out generates files.
|
||||
lib.hasSuffix ".o" baseName ||
|
||||
lib.hasSuffix ".so" baseName ||
|
||||
# Filter out nix-build result symlinks
|
||||
(type == "symlink" && lib.hasPrefix "result" baseName) ||
|
||||
# Filter out sockets and other types of files we can't have in the store.
|
||||
(type == "unknown")
|
||||
);
|
||||
# Filter out generates files.
|
||||
lib.hasSuffix ".o" baseName
|
||||
|| lib.hasSuffix ".so" baseName
|
||||
||
|
||||
# Filter out nix-build result symlinks
|
||||
(type == "symlink" && lib.hasPrefix "result" baseName)
|
||||
||
|
||||
# Filter out sockets and other types of files we can't have in the store.
|
||||
(type == "unknown")
|
||||
);
|
||||
|
||||
/*
|
||||
Filters a source tree removing version control files and directories using cleanSourceFilter.
|
||||
|
@ -46,7 +58,12 @@ let
|
|||
Example:
|
||||
cleanSource ./.
|
||||
*/
|
||||
cleanSource = src: cleanSourceWith { filter = cleanSourceFilter; inherit src; };
|
||||
cleanSource =
|
||||
src:
|
||||
cleanSourceWith {
|
||||
filter = cleanSourceFilter;
|
||||
inherit src;
|
||||
};
|
||||
|
||||
/*
|
||||
Like `builtins.filterSource`, except it will compose with itself,
|
||||
|
@ -65,7 +82,6 @@ let
|
|||
|
||||
builtins.filterSource f (builtins.filterSource g ./.)
|
||||
# Fails!
|
||||
|
||||
*/
|
||||
cleanSourceWith =
|
||||
{
|
||||
|
@ -80,11 +96,12 @@ let
|
|||
filter ? _path: _type: true,
|
||||
# Optional name to use as part of the store path.
|
||||
# This defaults to `src.name` or otherwise `"source"`.
|
||||
name ? null
|
||||
name ? null,
|
||||
}:
|
||||
let
|
||||
orig = toSourceAttributes src;
|
||||
in fromSourceAttributes {
|
||||
in
|
||||
fromSourceAttributes {
|
||||
inherit (orig) origSrc;
|
||||
filter = path: type: filter path type && orig.filter path type;
|
||||
name = if name != null then name else orig.name;
|
||||
|
@ -101,31 +118,40 @@ let
|
|||
let
|
||||
attrs = toSourceAttributes src;
|
||||
in
|
||||
fromSourceAttributes (
|
||||
attrs // {
|
||||
filter = path: type:
|
||||
let
|
||||
r = attrs.filter path type;
|
||||
in
|
||||
builtins.trace "${attrs.name}.filter ${path} = ${boolToString r}" r;
|
||||
}
|
||||
) // {
|
||||
satisfiesSubpathInvariant = src ? satisfiesSubpathInvariant && src.satisfiesSubpathInvariant;
|
||||
};
|
||||
fromSourceAttributes (
|
||||
attrs
|
||||
// {
|
||||
filter =
|
||||
path: type:
|
||||
let
|
||||
r = attrs.filter path type;
|
||||
in
|
||||
builtins.trace "${attrs.name}.filter ${path} = ${boolToString r}" r;
|
||||
}
|
||||
)
|
||||
// {
|
||||
satisfiesSubpathInvariant = src ? satisfiesSubpathInvariant && src.satisfiesSubpathInvariant;
|
||||
};
|
||||
|
||||
/*
|
||||
Filter sources by a list of regular expressions.
|
||||
|
||||
Example: src = sourceByRegex ./my-subproject [".*\.py$" "^database.sql$"]
|
||||
*/
|
||||
sourceByRegex = src: regexes:
|
||||
sourceByRegex =
|
||||
src: regexes:
|
||||
let
|
||||
isFiltered = src ? _isLibCleanSourceWith;
|
||||
origSrc = if isFiltered then src.origSrc else src;
|
||||
in lib.cleanSourceWith {
|
||||
filter = (path: type:
|
||||
let relPath = lib.removePrefix (toString origSrc + "/") (toString path);
|
||||
in lib.any (re: match re relPath != null) regexes);
|
||||
in
|
||||
lib.cleanSourceWith {
|
||||
filter = (
|
||||
path: type:
|
||||
let
|
||||
relPath = lib.removePrefix (toString origSrc + "/") (toString path);
|
||||
in
|
||||
lib.any (re: match re relPath != null) regexes
|
||||
);
|
||||
inherit src;
|
||||
};
|
||||
|
||||
|
@ -145,21 +171,29 @@ let
|
|||
src:
|
||||
# A list of file suffix strings
|
||||
exts:
|
||||
let filter = name: type:
|
||||
let base = baseNameOf (toString name);
|
||||
in type == "directory" || lib.any (ext: lib.hasSuffix ext base) exts;
|
||||
in cleanSourceWith { inherit filter src; };
|
||||
let
|
||||
filter =
|
||||
name: type:
|
||||
let
|
||||
base = baseNameOf (toString name);
|
||||
in
|
||||
type == "directory" || lib.any (ext: lib.hasSuffix ext base) exts;
|
||||
in
|
||||
cleanSourceWith { inherit filter src; };
|
||||
|
||||
pathIsGitRepo = path: (_commitIdFromGitRepoOrError path)?value;
|
||||
pathIsGitRepo = path: (_commitIdFromGitRepoOrError path) ? value;
|
||||
|
||||
/*
|
||||
Get the commit id of a git repo.
|
||||
|
||||
Example: commitIdFromGitRepo <nixpkgs/.git>
|
||||
*/
|
||||
commitIdFromGitRepo = path:
|
||||
let commitIdOrError = _commitIdFromGitRepoOrError path;
|
||||
in commitIdOrError.value or (throw commitIdOrError.error);
|
||||
commitIdFromGitRepo =
|
||||
path:
|
||||
let
|
||||
commitIdOrError = _commitIdFromGitRepoOrError path;
|
||||
in
|
||||
commitIdOrError.value or (throw commitIdOrError.error);
|
||||
|
||||
# Get the commit id of a git repo.
|
||||
|
||||
|
@ -168,55 +202,68 @@ let
|
|||
# Example: commitIdFromGitRepo <nixpkgs/.git>
|
||||
# not exported, used for commitIdFromGitRepo
|
||||
_commitIdFromGitRepoOrError =
|
||||
let readCommitFromFile = file: path:
|
||||
let fileName = path + "/${file}";
|
||||
packedRefsName = path + "/packed-refs";
|
||||
absolutePath = base: path:
|
||||
if lib.hasPrefix "/" path
|
||||
then path
|
||||
else toString (/. + "${base}/${path}");
|
||||
in if pathIsRegularFile path
|
||||
# Resolve git worktrees. See gitrepository-layout(5)
|
||||
then
|
||||
let m = match "^gitdir: (.*)$" (lib.fileContents path);
|
||||
in if m == null
|
||||
then { error = "File contains no gitdir reference: " + path; }
|
||||
else
|
||||
let gitDir = absolutePath (dirOf path) (lib.head m);
|
||||
commonDir'' = if pathIsRegularFile "${gitDir}/commondir"
|
||||
then lib.fileContents "${gitDir}/commondir"
|
||||
else gitDir;
|
||||
commonDir' = lib.removeSuffix "/" commonDir'';
|
||||
commonDir = absolutePath gitDir commonDir';
|
||||
refFile = lib.removePrefix "${commonDir}/" "${gitDir}/${file}";
|
||||
in readCommitFromFile refFile commonDir
|
||||
let
|
||||
readCommitFromFile =
|
||||
file: path:
|
||||
let
|
||||
fileName = path + "/${file}";
|
||||
packedRefsName = path + "/packed-refs";
|
||||
absolutePath =
|
||||
base: path: if lib.hasPrefix "/" path then path else toString (/. + "${base}/${path}");
|
||||
in
|
||||
if
|
||||
pathIsRegularFile path
|
||||
# Resolve git worktrees. See gitrepository-layout(5)
|
||||
then
|
||||
let
|
||||
m = match "^gitdir: (.*)$" (lib.fileContents path);
|
||||
in
|
||||
if m == null then
|
||||
{ error = "File contains no gitdir reference: " + path; }
|
||||
else
|
||||
let
|
||||
gitDir = absolutePath (dirOf path) (lib.head m);
|
||||
commonDir'' =
|
||||
if pathIsRegularFile "${gitDir}/commondir" then lib.fileContents "${gitDir}/commondir" else gitDir;
|
||||
commonDir' = lib.removeSuffix "/" commonDir'';
|
||||
commonDir = absolutePath gitDir commonDir';
|
||||
refFile = lib.removePrefix "${commonDir}/" "${gitDir}/${file}";
|
||||
in
|
||||
readCommitFromFile refFile commonDir
|
||||
|
||||
else if pathIsRegularFile fileName
|
||||
# Sometimes git stores the commitId directly in the file but
|
||||
# sometimes it stores something like: «ref: refs/heads/branch-name»
|
||||
then
|
||||
let fileContent = lib.fileContents fileName;
|
||||
matchRef = match "^ref: (.*)$" fileContent;
|
||||
in if matchRef == null
|
||||
then { value = fileContent; }
|
||||
else readCommitFromFile (lib.head matchRef) path
|
||||
else if
|
||||
pathIsRegularFile fileName
|
||||
# Sometimes git stores the commitId directly in the file but
|
||||
# sometimes it stores something like: «ref: refs/heads/branch-name»
|
||||
then
|
||||
let
|
||||
fileContent = lib.fileContents fileName;
|
||||
matchRef = match "^ref: (.*)$" fileContent;
|
||||
in
|
||||
if matchRef == null then { value = fileContent; } else readCommitFromFile (lib.head matchRef) path
|
||||
|
||||
else if pathIsRegularFile packedRefsName
|
||||
# Sometimes, the file isn't there at all and has been packed away in the
|
||||
# packed-refs file, so we have to grep through it:
|
||||
then
|
||||
let fileContent = readFile packedRefsName;
|
||||
matchRef = match "([a-z0-9]+) ${file}";
|
||||
isRef = s: isString s && (matchRef s) != null;
|
||||
# there is a bug in libstdc++ leading to stackoverflow for long strings:
|
||||
# https://github.com/NixOS/nix/issues/2147#issuecomment-659868795
|
||||
refs = filter isRef (split "\n" fileContent);
|
||||
in if refs == []
|
||||
then { error = "Could not find " + file + " in " + packedRefsName; }
|
||||
else { value = lib.head (matchRef (lib.head refs)); }
|
||||
else if
|
||||
pathIsRegularFile packedRefsName
|
||||
# Sometimes, the file isn't there at all and has been packed away in the
|
||||
# packed-refs file, so we have to grep through it:
|
||||
then
|
||||
let
|
||||
fileContent = readFile packedRefsName;
|
||||
matchRef = match "([a-z0-9]+) ${file}";
|
||||
isRef = s: isString s && (matchRef s) != null;
|
||||
# there is a bug in libstdc++ leading to stackoverflow for long strings:
|
||||
# https://github.com/NixOS/nix/issues/2147#issuecomment-659868795
|
||||
refs = filter isRef (split "\n" fileContent);
|
||||
in
|
||||
if refs == [ ] then
|
||||
{ error = "Could not find " + file + " in " + packedRefsName; }
|
||||
else
|
||||
{ value = lib.head (matchRef (lib.head refs)); }
|
||||
|
||||
else { error = "Not a .git directory: " + toString path; };
|
||||
in readCommitFromFile "HEAD";
|
||||
else
|
||||
{ error = "Not a .git directory: " + toString path; };
|
||||
in
|
||||
readCommitFromFile "HEAD";
|
||||
|
||||
pathHasContext = builtins.hasContext or (lib.hasPrefix storeDir);
|
||||
|
||||
|
@ -233,7 +280,8 @@ let
|
|||
# like class of objects in the wild.
|
||||
# (Existing ones being: paths, strings, sources and x//{outPath})
|
||||
# So instead of exposing internals, we build a library of combinator functions.
|
||||
toSourceAttributes = src:
|
||||
toSourceAttributes =
|
||||
src:
|
||||
let
|
||||
isFiltered = src ? _isLibCleanSourceWith;
|
||||
in
|
||||
|
@ -247,26 +295,38 @@ let
|
|||
# fromSourceAttributes : SourceAttrs -> Source
|
||||
#
|
||||
# Inverse of toSourceAttributes for Source objects.
|
||||
fromSourceAttributes = { origSrc, filter, name }:
|
||||
fromSourceAttributes =
|
||||
{
|
||||
origSrc,
|
||||
filter,
|
||||
name,
|
||||
}:
|
||||
{
|
||||
_isLibCleanSourceWith = true;
|
||||
inherit origSrc filter name;
|
||||
outPath = builtins.path { inherit filter name; path = origSrc; };
|
||||
outPath = builtins.path {
|
||||
inherit filter name;
|
||||
path = origSrc;
|
||||
};
|
||||
};
|
||||
|
||||
in {
|
||||
in
|
||||
{
|
||||
|
||||
pathType = lib.warnIf (lib.oldestSupportedReleaseIsAtLeast 2305)
|
||||
"lib.sources.pathType has been moved to lib.filesystem.pathType."
|
||||
lib.filesystem.pathType;
|
||||
pathType =
|
||||
lib.warnIf (lib.oldestSupportedReleaseIsAtLeast 2305)
|
||||
"lib.sources.pathType has been moved to lib.filesystem.pathType."
|
||||
lib.filesystem.pathType;
|
||||
|
||||
pathIsDirectory = lib.warnIf (lib.oldestSupportedReleaseIsAtLeast 2305)
|
||||
"lib.sources.pathIsDirectory has been moved to lib.filesystem.pathIsDirectory."
|
||||
lib.filesystem.pathIsDirectory;
|
||||
pathIsDirectory =
|
||||
lib.warnIf (lib.oldestSupportedReleaseIsAtLeast 2305)
|
||||
"lib.sources.pathIsDirectory has been moved to lib.filesystem.pathIsDirectory."
|
||||
lib.filesystem.pathIsDirectory;
|
||||
|
||||
pathIsRegularFile = lib.warnIf (lib.oldestSupportedReleaseIsAtLeast 2305)
|
||||
"lib.sources.pathIsRegularFile has been moved to lib.filesystem.pathIsRegularFile."
|
||||
lib.filesystem.pathIsRegularFile;
|
||||
pathIsRegularFile =
|
||||
lib.warnIf (lib.oldestSupportedReleaseIsAtLeast 2305)
|
||||
"lib.sources.pathIsRegularFile has been moved to lib.filesystem.pathIsRegularFile."
|
||||
lib.filesystem.pathIsRegularFile;
|
||||
|
||||
inherit
|
||||
pathIsGitRepo
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue