Import from Fedora
This commit is contained in:
commit
b9114578bc
1
.fmf/version
Normal file
1
.fmf/version
Normal file
@ -0,0 +1 @@
|
||||
1
|
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
/*.src.rpm
|
||||
/*.tar.gz
|
100
0001-Avoid-bundling-asm.patch
Normal file
100
0001-Avoid-bundling-asm.patch
Normal file
@ -0,0 +1,100 @@
|
||||
From beaed3d4ce80ae695f7f2a3e02e11c39fbb4e1f8 Mon Sep 17 00:00:00 2001
|
||||
From: Marian Koncek <mkoncek@redhat.com>
|
||||
Date: Thu, 23 Feb 2023 13:59:25 +0100
|
||||
Subject: [PATCH] Avoid bundling asm
|
||||
|
||||
---
|
||||
byte-buddy/pom.xml | 56 +++++++++-------------------------------------
|
||||
1 file changed, 11 insertions(+), 45 deletions(-)
|
||||
|
||||
diff --git a/byte-buddy/pom.xml b/byte-buddy/pom.xml
|
||||
index 625e0d6..97ac874 100644
|
||||
--- a/byte-buddy/pom.xml
|
||||
+++ b/byte-buddy/pom.xml
|
||||
@@ -26,8 +26,6 @@
|
||||
-->
|
||||
|
||||
<properties>
|
||||
- <shade.source>org.objectweb.asm</shade.source>
|
||||
- <shade.target>net.bytebuddy.jar.asm</shade.target>
|
||||
<packages.list.external>
|
||||
net.bytebuddy,
|
||||
net.bytebuddy.agent.builder,
|
||||
@@ -62,10 +60,7 @@
|
||||
net.bytebuddy.utility,
|
||||
net.bytebuddy.utility.nullability,
|
||||
net.bytebuddy.utility.privilege,
|
||||
- net.bytebuddy.utility.visitor,
|
||||
- ${shade.target},
|
||||
- ${shade.target}.signature,
|
||||
- ${shade.target}.commons
|
||||
+ net.bytebuddy.utility.visitor
|
||||
</packages.list.external>
|
||||
<packages.list.internal>
|
||||
net.bytebuddy.utility.dispatcher
|
||||
@@ -166,6 +161,16 @@
|
||||
<artifactId>asm</artifactId>
|
||||
<version>${version.asm}</version>
|
||||
</dependency>
|
||||
+ <dependency>
|
||||
+ <groupId>org.ow2.asm</groupId>
|
||||
+ <artifactId>asm</artifactId>
|
||||
+ <version>${version.asm}</version>
|
||||
+ </dependency>
|
||||
+ <dependency>
|
||||
+ <groupId>org.ow2.asm</groupId>
|
||||
+ <artifactId>asm-commons</artifactId>
|
||||
+ <version>${version.asm}</version>
|
||||
+ </dependency>
|
||||
</dependencies>
|
||||
<executions>
|
||||
<execution>
|
||||
@@ -253,45 +258,6 @@
|
||||
<createDependencyReducedPom>true</createDependencyReducedPom>
|
||||
<createSourcesJar>${bytebuddy.extras}</createSourcesJar>
|
||||
<shadeSourcesContent>true</shadeSourcesContent>
|
||||
- <relocations>
|
||||
- <relocation>
|
||||
- <pattern>${shade.source}</pattern>
|
||||
- <shadedPattern>${shade.target}</shadedPattern>
|
||||
- </relocation>
|
||||
- </relocations>
|
||||
- <filters>
|
||||
- <filter>
|
||||
- <artifact>net.bytebuddy:byte-buddy-dep:*</artifact>
|
||||
- <excludes>
|
||||
- <exclude>META-INF/MANIFEST.MF</exclude>
|
||||
- <exclude>META-INF/maven/**</exclude>
|
||||
- </excludes>
|
||||
- </filter>
|
||||
- <filter>
|
||||
- <artifact>org.ow2.asm:*</artifact>
|
||||
- <excludes>
|
||||
- <exclude>META-INF/MANIFEST.MF</exclude>
|
||||
- <exclude>**/module-info.class</exclude>
|
||||
- <exclude>**/LICENSE</exclude>
|
||||
- <exclude>**/NOTICE</exclude>
|
||||
- </excludes>
|
||||
- </filter>
|
||||
- <filter>
|
||||
- <artifact>org.ow2.asm:asm-commons</artifact>
|
||||
- <includes>
|
||||
- <include>org/objectweb/asm/commons/AnnotationRemapper.**</include>
|
||||
- <include>org/objectweb/asm/commons/ClassRemapper.**</include>
|
||||
- <include>org/objectweb/asm/commons/FieldRemapper.**</include>
|
||||
- <include>org/objectweb/asm/commons/MethodRemapper.**</include>
|
||||
- <include>org/objectweb/asm/commons/ModuleHashesAttribute.**</include>
|
||||
- <include>org/objectweb/asm/commons/ModuleRemapper.**</include>
|
||||
- <include>org/objectweb/asm/commons/RecordComponentRemapper.**</include>
|
||||
- <include>org/objectweb/asm/commons/Remapper.**</include>
|
||||
- <include>org/objectweb/asm/commons/SignatureRemapper.**</include>
|
||||
- <include>org/objectweb/asm/commons/SimpleRemapper.**</include>
|
||||
- </includes>
|
||||
- </filter>
|
||||
- </filters>
|
||||
<transformers>
|
||||
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
|
||||
<mainClass>net.bytebuddy.build.Plugin$Engine$Default</mainClass>
|
||||
--
|
||||
2.39.1
|
||||
|
2177
0002-Remove-dependencies.patch
Normal file
2177
0002-Remove-dependencies.patch
Normal file
File diff suppressed because it is too large
Load Diff
36
0003-Fix-broken-modular-jars.patch
Normal file
36
0003-Fix-broken-modular-jars.patch
Normal file
@ -0,0 +1,36 @@
|
||||
From 5dc1f89e58e41069158e4e00e7772220a6493480 Mon Sep 17 00:00:00 2001
|
||||
From: Marian Koncek <mkoncek@redhat.com>
|
||||
Date: Sat, 24 Feb 2024 17:01:21 +0100
|
||||
Subject: [PATCH] Fix broken modular jars
|
||||
|
||||
---
|
||||
byte-buddy/pom.xml | 5 +++--
|
||||
1 file changed, 3 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/byte-buddy/pom.xml b/byte-buddy/pom.xml
|
||||
index b954bb7..68c18b4 100644
|
||||
--- a/byte-buddy/pom.xml
|
||||
+++ b/byte-buddy/pom.xml
|
||||
@@ -162,9 +162,9 @@
|
||||
</dependencies>
|
||||
<executions>
|
||||
<execution>
|
||||
- <phase>prepare-package</phase>
|
||||
+ <phase>package</phase>
|
||||
<goals>
|
||||
- <goal>make-module</goal>
|
||||
+ <goal>inject-module</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<skip>${modulemaker.skip}</skip>
|
||||
@@ -181,6 +181,7 @@
|
||||
com.sun.jna,
|
||||
com.sun.jna.platform
|
||||
</static-requires>
|
||||
+ <main-class>net.bytebuddy.build.Plugin$Engine$Default</main-class>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
--
|
||||
2.43.0
|
||||
|
272
byte-buddy.spec
Normal file
272
byte-buddy.spec
Normal file
@ -0,0 +1,272 @@
|
||||
%bcond_with bootstrap
|
||||
|
||||
Name: byte-buddy
|
||||
Version: 1.14.2
|
||||
Release: 21%{?dist}
|
||||
Summary: Runtime code generation for the Java virtual machine
|
||||
License: Apache-2.0
|
||||
URL: http://bytebuddy.net/
|
||||
BuildArch: noarch
|
||||
ExclusiveArch: %{java_arches} noarch
|
||||
|
||||
Source0: https://github.com/raphw/byte-buddy/archive/refs/tags/byte-buddy-%{version}.tar.gz
|
||||
|
||||
# Patch the build to avoid bundling inside shaded jars
|
||||
Patch: 0001-Avoid-bundling-asm.patch
|
||||
Patch: 0002-Remove-dependencies.patch
|
||||
Patch: 0003-Fix-broken-modular-jars.patch
|
||||
|
||||
BuildRequires: jurand
|
||||
%if %{with bootstrap}
|
||||
BuildRequires: javapackages-bootstrap
|
||||
%else
|
||||
BuildRequires: maven-local
|
||||
BuildRequires: mvn(codes.rafael.modulemaker:modulemaker-maven-plugin)
|
||||
BuildRequires: mvn(junit:junit)
|
||||
BuildRequires: mvn(net.bytebuddy:byte-buddy)
|
||||
BuildRequires: mvn(net.bytebuddy:byte-buddy-dep)
|
||||
BuildRequires: mvn(org.apache.felix:maven-bundle-plugin)
|
||||
BuildRequires: mvn(org.apache.maven.plugin-testing:maven-plugin-testing-harness)
|
||||
BuildRequires: mvn(org.apache.maven.plugin-tools:maven-plugin-annotations)
|
||||
BuildRequires: mvn(org.apache.maven.plugins:maven-antrun-plugin)
|
||||
BuildRequires: mvn(org.apache.maven.plugins:maven-plugin-plugin)
|
||||
BuildRequires: mvn(org.apache.maven:maven-compat)
|
||||
BuildRequires: mvn(org.apache.maven:maven-core)
|
||||
BuildRequires: mvn(org.apache.maven:maven-plugin-api)
|
||||
BuildRequires: mvn(org.codehaus.mojo:build-helper-maven-plugin)
|
||||
BuildRequires: mvn(org.eclipse.aether:aether-api)
|
||||
BuildRequires: mvn(org.eclipse.aether:aether-util)
|
||||
BuildRequires: mvn(org.mockito:mockito-core)
|
||||
BuildRequires: mvn(org.ow2.asm:asm)
|
||||
BuildRequires: mvn(org.ow2.asm:asm-analysis)
|
||||
BuildRequires: mvn(org.ow2.asm:asm-commons)
|
||||
BuildRequires: mvn(org.ow2.asm:asm-util)
|
||||
%endif
|
||||
|
||||
%description
|
||||
Byte Buddy is a code generation library for creating Java classes during the
|
||||
runtime of a Java application and without the help of a compiler. Other than
|
||||
the code generation utilities that ship with the Java Class Library, Byte Buddy
|
||||
allows the creation of arbitrary classes and is not limited to implementing
|
||||
interfaces for the creation of runtime proxies.
|
||||
|
||||
%package agent
|
||||
Summary: Byte Buddy Java agent
|
||||
|
||||
%description agent
|
||||
The Byte Buddy Java agent allows to access the JVM's HotSwap feature.
|
||||
|
||||
%package maven-plugin
|
||||
Summary: Byte Buddy Maven plugin
|
||||
|
||||
%description maven-plugin
|
||||
A plugin for post-processing class files via Byte Buddy in a Maven build.
|
||||
|
||||
%package javadoc
|
||||
Summary: API documentation for %{name}
|
||||
|
||||
%description javadoc
|
||||
API documentation for %{name}.
|
||||
|
||||
%prep
|
||||
%autosetup -p1 -n %{name}-%{name}-%{version}
|
||||
|
||||
|
||||
find -name '*.class' -delete
|
||||
|
||||
rm byte-buddy-agent/src/test/java/net/bytebuddy/agent/VirtualMachineAttachmentTest.java\
|
||||
byte-buddy-agent/src/test/java/net/bytebuddy/agent/VirtualMachineForOpenJ9Test.java\
|
||||
byte-buddy-agent/src/test/java/net/bytebuddy/test/utility/JnaRule.java\
|
||||
;
|
||||
|
||||
# Don't ship android or benchmark modules
|
||||
%pom_disable_module byte-buddy-android
|
||||
%pom_disable_module byte-buddy-android-test
|
||||
%pom_disable_module byte-buddy-benchmark
|
||||
|
||||
# Don't ship gradle plugin
|
||||
%pom_disable_module byte-buddy-gradle-plugin
|
||||
|
||||
# Remove check plugins unneeded by RPM builds
|
||||
%pom_remove_plugin :jacoco-maven-plugin
|
||||
%pom_remove_plugin :license-maven-plugin
|
||||
%pom_remove_plugin :pitest-maven
|
||||
%pom_remove_plugin :coveralls-maven-plugin
|
||||
%pom_remove_plugin :spotbugs-maven-plugin
|
||||
%pom_remove_plugin :jitwatch-jarscan-maven-plugin
|
||||
%pom_remove_plugin :maven-release-plugin
|
||||
%pom_remove_plugin :nexus-staging-maven-plugin
|
||||
|
||||
# Avoid circural dependency
|
||||
%pom_remove_plugin :byte-buddy-maven-plugin byte-buddy-dep
|
||||
|
||||
# Not interested in shading sources (causes NPE on old versions of shade plugin)
|
||||
%pom_xpath_set "pom:createSourcesJar" "false" byte-buddy
|
||||
|
||||
# Drop build dep on findbugs annotations, used only by the above check plugins
|
||||
%pom_remove_dep -r :findbugs-annotations
|
||||
%java_remove_annotations byte-buddy-agent byte-buddy-dep byte-buddy-maven-plugin -n SuppressFBWarnings
|
||||
|
||||
%pom_remove_dep org.ow2.asm:asm-deprecated
|
||||
|
||||
%pom_remove_plugin -r :maven-shade-plugin
|
||||
%pom_remove_dep -r net.java.dev.jna:jna
|
||||
%pom_remove_dep -r net.java.dev.jna:jna-platform
|
||||
|
||||
%mvn_package :byte-buddy-parent __noinstall
|
||||
|
||||
%build
|
||||
# Ignore test failures, there seems to be something different about the
|
||||
# bytecode of our recompiled test resources, expect 6 test failures in
|
||||
# the byte-buddy-dep module
|
||||
|
||||
# NOTE you can obtain valid profiles for precompilation by:
|
||||
# xmllint --xpath '//*[local-name()="profile"]/*[local-name()="id"]/text()' byte-buddy-dep/pom.xml | grep 'precompile$' | grep -v 'no-precompile$' | sed 's/\(.*\)/-P\1/'
|
||||
profiles='-Pjava-8-precompile -Pjava-8-parameters-precompile -Pjava-11-precompile -Pjava-16-precompile -Pjava-17-precompile'
|
||||
%mvn_build -s -- -P'java8,!checks' "${profiles}" -Dsourcecode.main.version=8 -Dsourcecode.test.version=8 -Dmaven.test.failure.ignore=true
|
||||
|
||||
%install
|
||||
%mvn_install
|
||||
|
||||
%files -f .mfiles-%{name} -f .mfiles-%{name}-dep
|
||||
%doc README.md release-notes.md
|
||||
%license LICENSE NOTICE
|
||||
|
||||
%files agent -f .mfiles-%{name}-agent
|
||||
%license LICENSE NOTICE
|
||||
|
||||
%files maven-plugin -f .mfiles-%{name}-maven-plugin
|
||||
|
||||
%files javadoc -f .mfiles-javadoc
|
||||
%license LICENSE NOTICE
|
||||
|
||||
%changelog
|
||||
* Fri Nov 29 2024 Mikolaj Izdebski <mizdebsk@redhat.com> - 1.14.2-17
|
||||
- Update javapackages test plan to f42
|
||||
|
||||
* Wed Jul 17 2024 Fedora Release Engineering <releng@fedoraproject.org> - 1.14.2-9
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild
|
||||
|
||||
* Tue Feb 27 2024 Jiri Vanek <jvanek@redhat.com> - 1.14.2-8
|
||||
- Rebuilt for java-21-openjdk as system jdk
|
||||
|
||||
* Tue Feb 20 2024 Marian Koncek <mkoncek@redhat.com> - 1.14.2-7
|
||||
- Update Java source/target to 8
|
||||
|
||||
* Tue Jan 23 2024 Fedora Release Engineering <releng@fedoraproject.org> - 1.14.2-6
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
|
||||
|
||||
* Fri Jan 19 2024 Fedora Release Engineering <releng@fedoraproject.org> - 1.14.2-5
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
|
||||
|
||||
* Fri Sep 01 2023 Mikolaj Izdebski <mizdebsk@redhat.com> - 1.14.2-4
|
||||
- Convert License tag to SPDX format
|
||||
|
||||
* Wed Aug 30 2023 Mikolaj Izdebski <mizdebsk@redhat.com> - 1.14.2-3
|
||||
- Build with Jurand instead of deprecated javapackages-extra
|
||||
|
||||
* Wed Jul 19 2023 Fedora Release Engineering <releng@fedoraproject.org> - 1.14.2-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
|
||||
|
||||
* Thu Feb 23 2023 Marian Koncek <mkoncek@redhat.com> - 1.14.2-1
|
||||
- Update to upstream version 1.14.2
|
||||
|
||||
* Tue Feb 21 2023 Marian Koncek <mkoncek@redhat.com> - 1.12.10-4
|
||||
- Enable modulemaker-maven-plugin
|
||||
|
||||
* Wed Jan 18 2023 Fedora Release Engineering <releng@fedoraproject.org> - 1.12.10-3
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
|
||||
|
||||
* Wed Jul 20 2022 Fedora Release Engineering <releng@fedoraproject.org> - 1.12.10-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
|
||||
|
||||
* Mon May 09 2022 Mikolaj Izdebski <mizdebsk@redhat.com> - 1.12.10-1
|
||||
- Update to upstream version 1.12.10
|
||||
|
||||
* Sat Feb 05 2022 Jiri Vanek <jvanek@redhat.com> - 1.12.0-3
|
||||
- Rebuilt for java-17-openjdk as system jdk
|
||||
|
||||
* Wed Jan 19 2022 Fedora Release Engineering <releng@fedoraproject.org> - 1.12.0-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
|
||||
|
||||
* Tue Nov 09 2021 Marian Koncek <mkoncek@redhat.com> - 1.12.0-1
|
||||
- Update to upstream version 1.12.0
|
||||
|
||||
* Wed Jul 21 2021 Fedora Release Engineering <releng@fedoraproject.org> - 1.10.20-3
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
|
||||
|
||||
* Mon May 17 2021 Mikolaj Izdebski <mizdebsk@redhat.com> - 1.10.20-2
|
||||
- Bootstrap build
|
||||
- Non-bootstrap build
|
||||
|
||||
* Thu Feb 04 2021 Marian Koncek <mkoncek@redhat.com> - 1.10.20-1
|
||||
- Update to upstream version 1.10.20
|
||||
|
||||
* Tue Jan 26 2021 Fedora Release Engineering <releng@fedoraproject.org> - 1.10.14-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
|
||||
|
||||
* Tue Sep 29 2020 Marian Koncek <mkoncek@redhat.com> - 1.10.16-1
|
||||
- Update to upstram version 1.10.16
|
||||
|
||||
* Fri Aug 14 2020 Jerry James <loganjerry@gmail.com> - 1.10.14-1
|
||||
- Version 1.10.14
|
||||
- Remove no longer needed no-unixsocket.patch
|
||||
- Add workaround for compiling tests with JDK 11
|
||||
|
||||
* Mon Jul 27 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1.9.5-9
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
|
||||
|
||||
* Fri Jul 10 2020 Jiri Vanek <jvanek@redhat.com> - 1.9.5-8
|
||||
- Rebuilt for JDK-11, see https://fedoraproject.org/wiki/Changes/Java11
|
||||
|
||||
* Tue Jan 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1.9.5-7
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
|
||||
|
||||
* Tue Jan 21 2020 Marian Koncek <mkoncek@redhat.com> - 1.10.7-1
|
||||
- Update to upstream version 1.10.7
|
||||
|
||||
* Thu Nov 21 2019 Marian Koncek <mkoncek@redhat.com> - 1.10.3-1
|
||||
- Update to upstream version 1.10.3
|
||||
|
||||
* Tue Nov 05 2019 Mikolaj Izdebski <mizdebsk@redhat.com> - 1.10.1-2
|
||||
- Mass rebuild for javapackages-tools 201902
|
||||
|
||||
* Thu Sep 12 2019 Marian Koncek <mkoncek@redhat.com> - 1.10.1-1
|
||||
- Update to upstream version 1.10.1
|
||||
|
||||
* Wed Jul 24 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1.9.5-6
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
|
||||
|
||||
* Wed Jul 10 2019 Marian Koncek <mkoncek@redhat.com> - 1.9.13-2
|
||||
- Remove the dependency on maven-shade-plugin
|
||||
|
||||
* Thu Jun 06 2019 Marian Koncek <mkoncek@redhat.com> - 1.9.13-1
|
||||
- Update to upstream version 1.9.13
|
||||
|
||||
* Fri May 24 2019 Mikolaj Izdebski <mizdebsk@redhat.com> - 1.9.5-5
|
||||
- Mass rebuild for javapackages-tools 201901
|
||||
|
||||
* Thu Jan 31 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1.9.5-5
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
|
||||
|
||||
* Thu Dec 06 2018 Mat Booth <mat.booth@redhat.com> - 1.9.5-4
|
||||
- Prevent NPE in maven-shade-plugin
|
||||
|
||||
* Wed Dec 05 2018 Mat Booth <mat.booth@redhat.com> - 1.9.5-3
|
||||
- Enable test suites
|
||||
|
||||
* Tue Dec 04 2018 Mat Booth <mat.booth@redhat.com> - 1.9.5-2
|
||||
- Full, non-bootstrap build
|
||||
|
||||
* Fri Nov 30 2018 Mat Booth <mat.booth@redhat.com> - 1.9.5-1
|
||||
- Update to latest upstream release
|
||||
- Add a bootstrap mode to break circular self-dependency
|
||||
- Patch out use of optional external unixsocket library that is not present
|
||||
in Fedora
|
||||
- Patch to avoid bundling ASM inside the shaded jar
|
||||
|
||||
* Wed May 25 2016 gil cattaneo <puntogil@libero.it> 1.3.19-1
|
||||
- update to 1.3.19
|
||||
|
||||
* Tue Dec 22 2015 gil cattaneo <puntogil@libero.it> 0.7.7-1
|
||||
- initial rpm
|
7
gating.yaml
Normal file
7
gating.yaml
Normal file
@ -0,0 +1,7 @@
|
||||
--- !Policy
|
||||
product_versions:
|
||||
- rhel-9
|
||||
decision_contexts:
|
||||
- osci_compose_gate
|
||||
rules:
|
||||
- !PassingTestCaseRule {test_case_name: osci.brew-build./plans/javapackages.functional}
|
7
plans/javapackages.fmf
Normal file
7
plans/javapackages.fmf
Normal file
@ -0,0 +1,7 @@
|
||||
summary: Run javapackages-specific tests
|
||||
discover:
|
||||
how: fmf
|
||||
url: https://src.fedoraproject.org/tests/javapackages
|
||||
ref: c9s
|
||||
execute:
|
||||
how: tmt
|
Loading…
Reference in New Issue
Block a user