git reset error when upgrading packages in custom PKGBUILD repo
Affected Version
paru v2.0.3 - libalpm v14.0.0
Description
Whenever I perform a system upgrade with paru that involves packages from a custom PKGBUILD repository, I get a git reset error message.
I am using paru -Syu --skipreview --upgrademenu --combinedupgrade to perform the system upgrade
This is admittedly only a very minor annoyance ...
Output
error: git reset --hard HEAD: No such file or directory (os error 2)
The error message is printed after the :: Running post-transaction hooks... section, i.e. right at the end of the terminal output.
The error message does not appear if the upgrade does not involve custom PKGBUILD packages.
Configs
paru.conf
[options]
SudoLoop
PgpFetch
Devel
CleanAfter
BatchInstall
NewsOnUpgrade
RemoveMake
BottomUp
SortBy = popularity
CompletionInterval = 7
DevelSuffixes = -git -cvs -svn -bzr -darcs -always -hg -fossil
[custom]
Url = https://github.com/.../custom-pkgbuilds
pacman.conf
#
# /etc/pacman.conf
#
# See the pacman.conf(5) manpage for option and repository directives
#
# GENERAL OPTIONS
#
[options]
# The following paths are commented out with their default values listed.
# If you wish to use different paths, uncomment and update the paths.
#RootDir = /
#DBPath = /var/lib/pacman/
#CacheDir = /var/cache/pacman/pkg/
#LogFile = /var/log/pacman.log
#GPGDir = /etc/pacman.d/gnupg/
#HookDir = /etc/pacman.d/hooks/
HoldPkg = pacman glibc
#XferCommand = /usr/bin/curl -L -C - -f -o %o %u
#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
#CleanMethod = KeepInstalled
Architecture = auto
# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup
#IgnorePkg =
#IgnoreGroup =
#NoUpgrade =
#NoExtract =
# Misc options
#UseSyslog
Color
#NoProgressBar
CheckSpace
#VerbosePkgLists
ParallelDownloads = 5
# By default, pacman accepts packages signed by keys that its local keyring
# trusts (see pacman-key and its man page), as well as unsigned packages.
SigLevel = Required DatabaseOptional
LocalFileSigLevel = Optional
#RemoteFileSigLevel = Required
# NOTE: You must run `pacman-key --init` before first using pacman; the local
# keyring can then be populated with the keys of all official Arch Linux
# packagers with `pacman-key --populate archlinux`.
#
# REPOSITORIES
# - can be defined here or included from another file
# - pacman will search repositories in the order defined here
# - local/custom mirrors can be added here or in separate files
# - repositories listed first will take precedence when packages
# have identical names, regardless of version number
# - URLs will have $repo replaced by the name of the current repo
# - URLs will have $arch replaced by the name of the architecture
#
# Repository entries are of the format:
# [repo-name]
# Server = ServerName
# Include = IncludePath
#
# The header [repo-name] is crucial - it must be present and
# uncommented to enable the repo.
#
# The testing repositories are disabled by default. To enable, uncomment the
# repo name header and Include lines. You can add preferred servers immediately
# after the header, and they will be used before the default mirrors.
#[core-testing]
#Include = /etc/pacman.d/mirrorlist
[core]
Include = /etc/pacman.d/mirrorlist
#[extra-testing]
#Include = /etc/pacman.d/mirrorlist
[extra]
Include = /etc/pacman.d/mirrorlist
# If you want to run 32 bit applications on your x86_64 system,
# enable the multilib repositories as required here.
#[multilib-testing]
#Include = /etc/pacman.d/mirrorlist
[multilib]
Include = /etc/pacman.d/mirrorlist
# An example of a custom package repository. See the pacman manpage for
# tips on creating your own repositories.
#[custom]
#SigLevel = Optional TrustAll
#Server = file:///home/custompkgs
I have the same problem.
I wonder if this is related to the fact that older packagages are not removed from pkginfo repos, even with CleanAfter. The old packages just keep being piled up in their respective repositories. The only way to clean them seems to be manually. -Scc does not work either.
I personally got this to go away by disabling CleanAfter, which makes me think the error comes from this function which uses git reset to clean untracked files:
pub fn clean_untracked(config: &Config, path: &Path) -> Result<()> {
let output = Command::new(&config.git_bin)
.args(&config.git_flags)
.current_dir(path)
.args(["reset", "--hard", "HEAD"])
.output()
.with_context(|| {
format!(
"{} {} reset --hard HEAD",
config.git_bin,
config.git_flags.join(" "),
)
})?;
if !output.status.success() {
bail!(
"{} {} reset --hard HEAD: {}",
config.git_bin,
config.git_flags.join(" "),
String::from_utf8_lossy(&output.stderr)
)
}
// snip...
Ok(())
}
Edit: added code snippet