diff options
-rw-r--r-- | doc/manual/change-authors.yml | 5 | ||||
-rw-r--r-- | doc/manual/rl-next/repl-fix-history.md | 9 | ||||
-rw-r--r-- | maintainers/README.md | 146 | ||||
-rw-r--r-- | maintainers/backporting.md | 12 | ||||
-rw-r--r-- | maintainers/release-process.md | 196 | ||||
-rwxr-xr-x | maintainers/upload-release.pl | 256 | ||||
-rw-r--r-- | src/libcmd/repl-interacter.cc | 2 | ||||
-rw-r--r-- | src/libstore/remote-store.cc | 3 | ||||
-rw-r--r-- | src/libutil/error.hh | 2 |
9 files changed, 20 insertions, 611 deletions
diff --git a/doc/manual/change-authors.yml b/doc/manual/change-authors.yml index 8c07d7e90..46164f5b1 100644 --- a/doc/manual/change-authors.yml +++ b/doc/manual/change-authors.yml @@ -66,3 +66,8 @@ midnightveil: display_name: julia forgejo: midnightveil github: midnightveil + +puck: + display_name: puck + forgejo: puck + github: puckipedia diff --git a/doc/manual/rl-next/repl-fix-history.md b/doc/manual/rl-next/repl-fix-history.md new file mode 100644 index 000000000..1517f68e7 --- /dev/null +++ b/doc/manual/rl-next/repl-fix-history.md @@ -0,0 +1,9 @@ +--- +synopsis: "`nix repl` history is saved more reliably" +cls: 1164 +credits: puck +--- + +`nix repl` now saves its history file after each line, rather than at the end +of the session; ensuring that it will remember what you typed even after it +crashes. diff --git a/maintainers/README.md b/maintainers/README.md deleted file mode 100644 index 0d520cb0c..000000000 --- a/maintainers/README.md +++ /dev/null @@ -1,146 +0,0 @@ -# Nix maintainers team - -## Motivation - -The team's main responsibility is to set a direction for the development of Nix and ensure that the code is in good shape. - -We aim to achieve this by improving the contributor experience and attracting more maintainers – that is, by helping other people contributing to Nix and eventually taking responsibility – in order to scale the development process to match users' needs. - -### Objectives - -- It is obvious what is worthwhile to work on. -- It is easy to find the right place in the code to make a change. -- It is clear what is expected of a pull request. -- It is predictable how to get a change merged and released. - -### Tasks - -- Establish, communicate, and maintain a technical roadmap -- Improve documentation targeted at contributors - - Record architecture and design decisions - - Elaborate contribution guides and abide to them - - Define and assert quality criteria for contributions -- Maintain the issue tracker and triage pull requests -- Help contributors succeed with pull requests that address roadmap milestones -- Manage the release lifecycle -- Regularly publish reports on work done -- Engage with third parties in the interest of the project -- Ensure the required maintainer capacity for all of the above - -## Members - -- Eelco Dolstra (@edolstra) – Team lead -- Théophane Hufschmitt (@thufschmitt) -- Valentin Gagarin (@fricklerhandwerk) -- Thomas Bereknyei (@tomberek) -- Robert Hensing (@roberth) -- John Ericson (@Ericson2314) - -## Meeting protocol - -The team meets twice a week: - -- Discussion meeting: [Fridays 13:00-14:00 CET](https://calendar.google.com/calendar/event?eid=MHNtOGVuNWtrZXNpZHR2bW1sM3QyN2ZjaGNfMjAyMjExMjVUMTIwMDAwWiBiOW81MmZvYnFqYWs4b3E4bGZraGczdDBxZ0Bn) - - 1. Triage issues and pull requests from the [No Status](#no-status) column (30 min) - 2. Discuss issues and pull requests from the [To discuss](#to-discuss) column (30 min) - -- Work meeting: [Mondays 13:00-15:00 CET](https://calendar.google.com/calendar/event?eid=NTM1MG1wNGJnOGpmOTZhYms3bTB1bnY5cWxfMjAyMjExMjFUMTIwMDAwWiBiOW81MmZvYnFqYWs4b3E4bGZraGczdDBxZ0Bn) - - 1. Code review on pull requests from [In review](#in-review). - 2. Other chores and tasks. - -Meeting notes are collected on a [collaborative scratchpad](https://pad.lassul.us/Cv7FpYx-Ri-4VjUykQOLAw), and published on Discourse under the [Nix category](https://discourse.nixos.org/c/dev/nix/50). - -## Project board protocol - -The team uses a [GitHub project board](https://github.com/orgs/NixOS/projects/19/views/1) for tracking its work. - -Items on the board progress through the following states: - -### No Status - -During the discussion meeting, the team triages new items. -To be considered, issues and pull requests must have a high-level description to provide the whole team with the necessary context at a glance. - -On every meeting, at least one item from each of the following categories is inspected: - -1. [critical](https://github.com/NixOS/nix/labels/critical) -2. [security](https://github.com/NixOS/nix/labels/security) -3. [regression](https://github.com/NixOS/nix/labels/regression) -4. [bug](https://github.com/NixOS/nix/issues?q=is%3Aopen+label%3Abug+sort%3Areactions-%2B1-desc) -5. [tests of existing functionality](https://github.com/NixOS/nix/issues?q=is%3Aopen+label%3Atests+-label%3Afeature+sort%3Areactions-%2B1-desc) - -- [oldest pull requests](https://github.com/NixOS/nix/pulls?q=is%3Apr+is%3Aopen+sort%3Acreated-asc) -- [most popular pull requests](https://github.com/NixOS/nix/pulls?q=is%3Apr+is%3Aopen+sort%3Areactions-%2B1-desc) -- [oldest issues](https://github.com/NixOS/nix/issues?q=is%3Aissue+is%3Aopen+sort%3Acreated-asc) -- [most popular issues](https://github.com/NixOS/nix/issues?q=is%3Aissue+is%3Aopen+sort%3Areactions-%2B1-desc) - -Team members can also add pull requests or issues they would like the whole team to consider. -To ensure process quality and reliability, all non-trivial pull requests must be triaged before merging. - -If there is disagreement on the general idea behind an issue or pull request, it is moved to [To discuss](#to-discuss). -Otherwise, the issue or pull request in questions get the label [`idea approved`](https://github.com/NixOS/nix/labels/idea%20approved). -For issues this means that an implementation is welcome and will be prioritised for review. -For pull requests this means that: -- Unfinished work is encouraged to be continued. -- A reviewer is assigned to take responsibility for getting the pull request merged. - The item is moved to the [Assigned](#assigned) column. -- If needed, the team can decide to do a collarorative review. - Then the item is moved to the [In review](#in-review) column, and review session is scheduled. - -What constitutes a trivial pull request is up to maintainers' judgement. - -### To discuss - -Pull requests and issues that are deemed important and controversial are discussed by the team during discussion meetings. - -This may be where the merit of the change itself or the implementation strategy is contested by a team member. - -As a general guideline, the order of items is determined as follows: - -- Prioritise pull requests over issues - - Contributors who took the time to implement concrete change proposals should not wait indefinitely. - -- Prioritise fixing bugs and testing over documentation, improvements or new features - - The team values stability and accessibility higher than raw functionality. - -- Interleave issues and PRs - - This way issues without attempts at a solution get a chance to get addressed. - -### In review - -Pull requests in this column are reviewed together during work meetings. -This is both for spreading implementation knowledge and for establishing common values in code reviews. - -When the overall direction is agreed upon, even when further changes are required, the pull request is assigned to one team member. -If significant changes are requested or reviewers cannot come to a conclusion in reasonable time, the pull request is [marked as draft](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/changing-the-stage-of-a-pull-request#converting-a-pull-request-to-a-draft). - -### Assigned - -One team member is assigned to each of these pull requests. -They will communicate with the authors, and make the final approval once all remaining issues are addressed. - -If more substantive issues arise, the assignee can move the pull request back to [To discuss](#to-discuss) or [In review](#in-review) to involve the team again. - -### Flowchart - -The process is illustrated in the following diagram: - -```mermaid -flowchart TD - discuss[To discuss] - - review[To review] - - New --> |Disagreement on idea| discuss - New & discuss --> |Consensus on idea| review - - review --> |Consensus on implementation| Assigned - - Assigned --> |Implementation issues arise| review - Assigned --> |Remaining issues fixed| Merged -``` diff --git a/maintainers/backporting.md b/maintainers/backporting.md deleted file mode 100644 index 2424050c8..000000000 --- a/maintainers/backporting.md +++ /dev/null @@ -1,12 +0,0 @@ - -# Backporting - -To [automatically backport a pull request](https://github.com/NixOS/nix/blob/master/.github/workflows/backport.yml) to a release branch once it's merged, assign it a label of the form [`backport <branch>`](https://github.com/NixOS/nix/labels?q=backport). - -Since [GitHub Actions workflows will not trigger other workflows](https://docs.github.com/en/actions/using-workflows/triggering-a-workflow#triggering-a-workflow-from-a-workflow), checks on the automatic backport need to be triggered by another actor. -This is achieved by closing and reopening the backport pull request. - -This specifically affects the [`installer_test`] check. -Note that it only runs after the other tests, so it may take a while to appear. - -[`installer_test`]: https://github.com/NixOS/nix/blob/895dfc656a21f6252ddf48df0d1f215effa04ecb/.github/workflows/ci.yml#L70-L91 diff --git a/maintainers/release-process.md b/maintainers/release-process.md deleted file mode 100644 index f2b60d8e7..000000000 --- a/maintainers/release-process.md +++ /dev/null @@ -1,196 +0,0 @@ -# Nix release process - -## Release artifacts - -The release process is intended to create the following for each -release: - -* A Git tag - -* Binary tarballs in https://releases.nixos.org/?prefix=nix/ - -* Docker images - -* Closures in https://cache.nixos.org - -* (Optionally) Updated `fallback-paths.nix` in Nixpkgs - -* An updated manual on https://nixos.org/manual/nix/stable/ - -## Creating a new release from the `master` branch - -* Make sure that the [Hydra `master` jobset](https://hydra.nixos.org/jobset/nix/master) succeeds. - -* In a checkout of the Nix repo, make sure you're on `master` and run - `git pull`. - -* Compile the release notes by running - - ```console - $ git checkout -b release-notes - $ VERSION=X.YY ./maintainers/release-notes - ``` - - where `X.YY` is *without* the patch level, e.g. `2.12` rather than ~~`2.12.0`~~. - - A commit is created. - -* Proof-read / edit / rearrange the release notes if needed. Breaking changes - and highlights should go to the top. - -* Push. - - ```console - $ git push --set-upstream $REMOTE release-notes - ``` - -* Create a PR for `release-notes`. - -* Wait for the PR to be merged. - -* Create a branch for the release: - - ```console - $ git checkout master - $ git pull - $ git checkout -b $VERSION-maintenance - ``` - -* Mark the release as official: - - ```console - $ sed -e 's/officialRelease = false;/officialRelease = true;/' -i flake.nix - $ sed -e '/rl-next.md/ d' -i doc/manual/src/SUMMARY.md - ``` - - This removes the link to `rl-next.md` from the manual and sets - `officialRelease = true` in `flake.nix`. - -* Commit - -* Push the release branch: - - ```console - $ git push --set-upstream origin $VERSION-maintenance - ``` - -* Create a jobset for the release branch on Hydra as follows: - - * Go to the jobset of the previous release - (e.g. https://hydra.nixos.org/jobset/nix/maintenance-2.11). - - * Select `Actions -> Clone this jobset`. - - * Set identifier to `maintenance-$VERSION`. - - * Set description to `$VERSION release branch`. - - * Set flake URL to `github:NixOS/nix/$VERSION-maintenance`. - - * Hit `Create jobset`. - -* Wait for the new jobset to evaluate and build. If impatient, go to - the evaluation and select `Actions -> Bump builds to front of - queue`. - -* When the jobset evaluation has succeeded building, take note of the - evaluation ID (e.g. `1780832` in - `https://hydra.nixos.org/eval/1780832`). - -* Tag the release and upload the release artifacts to - [`releases.nixos.org`](https://releases.nixos.org/) and [Docker Hub](https://hub.docker.com/): - - ```console - $ IS_LATEST=1 ./maintainers/upload-release.pl <EVAL-ID> - ``` - - Note: `IS_LATEST=1` causes the `latest-release` branch to be - force-updated. This is used by the `nixos.org` website to get the - [latest Nix manual](https://nixos.org/manual/nixpkgs/unstable/). - - TODO: This script requires the right AWS credentials. Document. - - TODO: This script currently requires a - `/home/eelco/Dev/nix-pristine`. - - TODO: trigger nixos.org netlify: https://docs.netlify.com/configure-builds/build-hooks/ - -* Prepare for the next point release by editing `.version` to - e.g. - - ```console - $ echo 2.12.1 > .version - $ git commit -a -m 'Bump version' - $ git push - ``` - - Commit and push this to the maintenance branch. - -* Bump the version of `master`: - - ```console - $ git checkout master - $ git pull - $ NEW_VERSION=2.13.0 - $ echo $NEW_VERSION > .version - $ git checkout -b bump-$NEW_VERSION - $ git commit -a -m 'Bump version' - $ git push --set-upstream origin bump-$NEW_VERSION - ``` - - Make a pull request and auto-merge it. - -* Create a milestone for the next release, move all unresolved issues - from the previous milestone, and close the previous milestone. Set - the date for the next milestone 6 weeks from now. - -* Create a backport label. - -* Post an [announcement on Discourse](https://discourse.nixos.org/c/announcements/8), including the contents of - `rl-$VERSION.md`. - -## Creating a point release - -* Checkout. - - ```console - $ git checkout XX.YY-maintenance - ``` - -* Determine the next patch version. - - ```console - $ export VERSION=XX.YY.ZZ - ``` - -* Update release notes. - - ```console - $ ./maintainers/release-notes - ``` - -* Push. - - ```console - $ git push - ``` - -* Wait for the desired evaluation of the maintenance jobset to finish - building. - -* Run - - ```console - $ IS_LATEST=1 ./maintainers/upload-release.pl <EVAL-ID> - ``` - - Omit `IS_LATEST=1` when creating a point release that is not on the - most recent stable branch. This prevents `nixos.org` to going back - to an older release. - -* Bump the version number of the release branch as above (e.g. to - `2.12.2`). - -## Recovering from mistakes - -`upload-release.pl` should be idempotent. For instance a wrong `IS_LATEST` value can be fixed that way, by running the script on the actual latest release. diff --git a/maintainers/upload-release.pl b/maintainers/upload-release.pl deleted file mode 100755 index ebc536f12..000000000 --- a/maintainers/upload-release.pl +++ /dev/null @@ -1,256 +0,0 @@ -#! /usr/bin/env nix-shell -#! nix-shell -i perl -p perl perlPackages.LWPUserAgent perlPackages.LWPProtocolHttps perlPackages.FileSlurp perlPackages.NetAmazonS3 gnupg1 - -use strict; -use Data::Dumper; -use File::Basename; -use File::Path; -use File::Slurp; -use File::Copy; -use JSON::PP; -use LWP::UserAgent; -use Net::Amazon::S3; - -my $evalId = $ARGV[0] or die "Usage: $0 EVAL-ID\n"; - -my $releasesBucketName = "nix-releases"; -my $channelsBucketName = "nix-channels"; - -my $TMPDIR = $ENV{'TMPDIR'} // "/tmp"; - -my $isLatest = ($ENV{'IS_LATEST'} // "") eq "1"; - -# FIXME: cut&paste from nixos-channel-scripts. -sub fetch { - my ($url, $type) = @_; - - my $ua = LWP::UserAgent->new; - $ua->default_header('Accept', $type) if defined $type; - - my $response = $ua->get($url); - die "could not download $url: ", $response->status_line, "\n" unless $response->is_success; - - return $response->decoded_content; -} - -my $evalUrl = "https://hydra.nixos.org/eval/$evalId"; -my $evalInfo = decode_json(fetch($evalUrl, 'application/json')); -#print Dumper($evalInfo); -my $flakeUrl = $evalInfo->{flake} or die; -my $flakeInfo = decode_json(`nix flake metadata --json "$flakeUrl"` or die); -my $nixRev = $flakeInfo->{revision} or die; - -my $buildInfo = decode_json(fetch("$evalUrl/job/build.x86_64-linux", 'application/json')); -#print Dumper($buildInfo); - -my $releaseName = $buildInfo->{nixname}; -$releaseName =~ /nix-(.*)$/ or die; -my $version = $1; - -print STDERR "Flake URL is $flakeUrl, Nix revision is $nixRev, version is $version\n"; - -my $releaseDir = "nix/$releaseName"; - -my $tmpDir = "$TMPDIR/nix-release/$releaseName"; -File::Path::make_path($tmpDir); - -my $narCache = "$TMPDIR/nar-cache"; -File::Path::make_path($narCache); - -my $binaryCache = "https://cache.nixos.org/?local-nar-cache=$narCache"; - -# S3 setup. -my $aws_access_key_id = $ENV{'AWS_ACCESS_KEY_ID'} or die "No AWS_ACCESS_KEY_ID given."; -my $aws_secret_access_key = $ENV{'AWS_SECRET_ACCESS_KEY'} or die "No AWS_SECRET_ACCESS_KEY given."; - -my $s3 = Net::Amazon::S3->new( - { aws_access_key_id => $aws_access_key_id, - aws_secret_access_key => $aws_secret_access_key, - retry => 1, - host => "s3-eu-west-1.amazonaws.com", - }); - -my $releasesBucket = $s3->bucket($releasesBucketName) or die; - -my $s3_us = Net::Amazon::S3->new( - { aws_access_key_id => $aws_access_key_id, - aws_secret_access_key => $aws_secret_access_key, - retry => 1, - }); - -my $channelsBucket = $s3_us->bucket($channelsBucketName) or die; - -sub getStorePath { - my ($jobName, $output) = @_; - my $buildInfo = decode_json(fetch("$evalUrl/job/$jobName", 'application/json')); - return $buildInfo->{buildoutputs}->{$output or "out"}->{path} or die "cannot get store path for '$jobName'"; -} - -sub copyManual { - my $manual = getStorePath("build.x86_64-linux", "doc"); - print "$manual\n"; - - my $manualNar = "$tmpDir/$releaseName-manual.nar.xz"; - print "$manualNar\n"; - - unless (-e $manualNar) { - system("NIX_REMOTE=$binaryCache nix store dump-path '$manual' | xz > '$manualNar'.tmp") == 0 - or die "unable to fetch $manual\n"; - rename("$manualNar.tmp", $manualNar) or die; - } - - unless (-e "$tmpDir/manual") { - system("xz -d < '$manualNar' | nix-store --restore $tmpDir/manual.tmp") == 0 - or die "unable to unpack $manualNar\n"; - rename("$tmpDir/manual.tmp/share/doc/nix/manual", "$tmpDir/manual") or die; - system("rm -rf '$tmpDir/manual.tmp'") == 0 or die; - } - - system("aws s3 sync '$tmpDir/manual' s3://$releasesBucketName/$releaseDir/manual") == 0 - or die "syncing manual to S3\n"; -} - -copyManual; - -sub downloadFile { - my ($jobName, $productNr, $dstName) = @_; - - my $buildInfo = decode_json(fetch("$evalUrl/job/$jobName", 'application/json')); - #print STDERR "$jobName: ", Dumper($buildInfo), "\n"; - - my $srcFile = $buildInfo->{buildproducts}->{$productNr}->{path} or die "job '$jobName' lacks product $productNr\n"; - $dstName //= basename($srcFile); - my $tmpFile = "$tmpDir/$dstName"; - - if (!-e $tmpFile) { - print STDERR "downloading $srcFile to $tmpFile...\n"; - - my $fileInfo = decode_json(`NIX_REMOTE=$binaryCache nix store ls --json '$srcFile'`); - - $srcFile = $fileInfo->{target} if $fileInfo->{type} eq 'symlink'; - - #print STDERR $srcFile, " ", Dumper($fileInfo), "\n"; - - system("NIX_REMOTE=$binaryCache nix store cat '$srcFile' > '$tmpFile'.tmp") == 0 - or die "unable to fetch $srcFile\n"; - rename("$tmpFile.tmp", $tmpFile) or die; - } - - my $sha256_expected = $buildInfo->{buildproducts}->{$productNr}->{sha256hash}; - my $sha256_actual = `nix hash file --base16 --type sha256 '$tmpFile'`; - chomp $sha256_actual; - if (defined($sha256_expected) && $sha256_expected ne $sha256_actual) { - print STDERR "file $tmpFile is corrupt, got $sha256_actual, expected $sha256_expected\n"; - exit 1; - } - - write_file("$tmpFile.sha256", $sha256_actual); - - return $sha256_expected; -} - -downloadFile("binaryTarball.i686-linux", "1"); -downloadFile("binaryTarball.x86_64-linux", "1"); -downloadFile("binaryTarball.aarch64-linux", "1"); -downloadFile("binaryTarball.x86_64-darwin", "1"); -downloadFile("binaryTarball.aarch64-darwin", "1"); -downloadFile("binaryTarballCross.x86_64-linux.armv6l-linux", "1"); -downloadFile("binaryTarballCross.x86_64-linux.armv7l-linux", "1"); -downloadFile("installerScript", "1"); - -# Upload docker images to dockerhub. -my $dockerManifest = ""; -my $dockerManifestLatest = ""; - -for my $platforms (["x86_64-linux", "amd64"], ["aarch64-linux", "arm64"]) { - my $system = $platforms->[0]; - my $dockerPlatform = $platforms->[1]; - my $fn = "nix-$version-docker-image-$dockerPlatform.tar.gz"; - downloadFile("dockerImage.$system", "1", $fn); - - print STDERR "loading docker image for $dockerPlatform...\n"; - system("docker load -i $tmpDir/$fn") == 0 or die; - - my $tag = "nixos/nix:$version-$dockerPlatform"; - my $latestTag = "nixos/nix:latest-$dockerPlatform"; - - print STDERR "tagging $version docker image for $dockerPlatform...\n"; - system("docker tag nix:$version $tag") == 0 or die; - - if ($isLatest) { - print STDERR "tagging latest docker image for $dockerPlatform...\n"; - system("docker tag nix:$version $latestTag") == 0 or die; - } - - print STDERR "pushing $version docker image for $dockerPlatform...\n"; - system("docker push -q $tag") == 0 or die; - - if ($isLatest) { - print STDERR "pushing latest docker image for $dockerPlatform...\n"; - system("docker push -q $latestTag") == 0 or die; - } - - $dockerManifest .= " --amend $tag"; - $dockerManifestLatest .= " --amend $latestTag" -} - -print STDERR "creating multi-platform docker manifest...\n"; -system("docker manifest rm nixos/nix:$version"); -system("docker manifest create nixos/nix:$version $dockerManifest") == 0 or die; -if ($isLatest) { - print STDERR "creating latest multi-platform docker manifest...\n"; - system("docker manifest rm nixos/nix:latest"); - system("docker manifest create nixos/nix:latest $dockerManifestLatest") == 0 or die; -} - -print STDERR "pushing multi-platform docker manifest...\n"; -system("docker manifest push nixos/nix:$version") == 0 or die; - -if ($isLatest) { - print STDERR "pushing latest multi-platform docker manifest...\n"; - system("docker manifest push nixos/nix:latest") == 0 or die; -} - -# Upload nix-fallback-paths.nix. -write_file("$tmpDir/fallback-paths.nix", - "{\n" . - " x86_64-linux = \"" . getStorePath("build.x86_64-linux") . "\";\n" . - " i686-linux = \"" . getStorePath("build.i686-linux") . "\";\n" . - " aarch64-linux = \"" . getStorePath("build.aarch64-linux") . "\";\n" . - " x86_64-darwin = \"" . getStorePath("build.x86_64-darwin") . "\";\n" . - " aarch64-darwin = \"" . getStorePath("build.aarch64-darwin") . "\";\n" . - "}\n"); - -# Upload release files to S3. -for my $fn (glob "$tmpDir/*") { - my $name = basename($fn); - next if $name eq "manual"; - my $dstKey = "$releaseDir/" . $name; - unless (defined $releasesBucket->head_key($dstKey)) { - print STDERR "uploading $fn to s3://$releasesBucketName/$dstKey...\n"; - - my $configuration = (); - $configuration->{content_type} = "application/octet-stream"; - - if ($fn =~ /.sha256|install|\.nix$/) { - $configuration->{content_type} = "text/plain"; - } - - $releasesBucket->add_key_filename($dstKey, $fn, $configuration) - or die $releasesBucket->err . ": " . $releasesBucket->errstr; - } -} - -# Update the "latest" symlink. -$channelsBucket->add_key( - "nix-latest/install", "", - { "x-amz-website-redirect-location" => "https://releases.nixos.org/$releaseDir/install" }) - or die $channelsBucket->err . ": " . $channelsBucket->errstr - if $isLatest; - -# Tag the release in Git. -chdir("/home/eelco/Dev/nix-pristine") or die; -system("git remote update origin") == 0 or die; -system("git tag --force --sign $version $nixRev -m 'Tagging release $version'") == 0 or die; -system("git push --tags") == 0 or die; -system("git push --force-with-lease origin $nixRev:refs/heads/latest-release") == 0 or die if $isLatest; diff --git a/src/libcmd/repl-interacter.cc b/src/libcmd/repl-interacter.cc index 829383add..d3567e021 100644 --- a/src/libcmd/repl-interacter.cc +++ b/src/libcmd/repl-interacter.cc @@ -175,6 +175,8 @@ bool ReadlineLikeInteracter::getLine(std::string & input, ReplPromptType promptT if (!s) return false; + + write_history(historyFile.c_str()); input += s; input += '\n'; return true; diff --git a/src/libstore/remote-store.cc b/src/libstore/remote-store.cc index 1cdfdb925..22d87b027 100644 --- a/src/libstore/remote-store.cc +++ b/src/libstore/remote-store.cc @@ -509,7 +509,8 @@ void RemoteStore::addToStore(const ValidPathInfo & info, Source & source, sink << exportMagic << printStorePath(info.path); - WorkerProto::write(*this, *conn, info.references); + WorkerProto::WriteConn nested { .to = sink, .version = conn->daemonVersion }; + WorkerProto::write(*this, nested, info.references); sink << (info.deriver ? printStorePath(*info.deriver) : "") << 0 // == no legacy signature diff --git a/src/libutil/error.hh b/src/libutil/error.hh index 924366580..323365d65 100644 --- a/src/libutil/error.hh +++ b/src/libutil/error.hh @@ -110,6 +110,8 @@ protected: public: BaseError(const BaseError &) = default; + BaseError & operator=(BaseError const & rhs) = default; + template<typename... Args> BaseError(unsigned int status, const Args & ... args) : err { .level = lvlError, .msg = HintFmt(args...), .status = status } |