Message ID | 20220221142006.6501-1-pavel@zhukoff.net |
---|---|
State | Accepted, archived |
Commit | 80500ecda4c1bc8812e6e078b6b0db5ec46624de |
Headers | show |
Series | [v2] patch.py: Prevent git repo reinitialization | expand |
On Mon, 2022-02-21 at 15:20 +0100, Pavel Zhukov wrote: > There were few bugs in the _isInitialized() function which might trigger > git repo to be reinitialized and patches failing to apply. > > Signed-off-by: Pavel Zhukov <pavel.zhukov@huawei.com> > --- > .../net-tools/Add_missing_headers.patch | 15 +++ > .../net-tools/net-tools/net-tools-config.h | 75 +++++++++++ > .../net-tools/net-tools/net-tools-config.make | 36 ++++++ > .../recipes-test/net-tools/net-tools_2.10.bb | 121 ++++++++++++++++++ > meta/lib/oe/patch.py | 6 +- > meta/lib/oeqa/selftest/cases/bbtests.py | 20 ++- > 6 files changed, 268 insertions(+), 5 deletions(-) > create mode 100644 meta-selftest/recipes-test/net-tools/net-tools/Add_missing_headers.patch > create mode 100644 meta-selftest/recipes-test/net-tools/net-tools/net-tools-config.h > create mode 100644 meta-selftest/recipes-test/net-tools/net-tools/net-tools-config.make > create mode 100644 meta-selftest/recipes-test/net-tools/net-tools_2.10.bb > > diff --git a/meta-selftest/recipes-test/net-tools/net-tools/Add_missing_headers.patch b/meta-selftest/recipes-test/net-tools/net-tools/Add_missing_headers.patch > new file mode 100644 > index 0000000000..f15d3654c7 > --- /dev/null > +++ b/meta-selftest/recipes-test/net-tools/net-tools/Add_missing_headers.patch > @@ -0,0 +1,15 @@ > +Description: Add missing headers > + > +Upstream-Status: Pending > +Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com> > + > +--- a/netstat.c > ++++ b/netstat.c > +@@ -88,6 +88,7 @@ > + #include <sys/stat.h> > + #include <net/if.h> > + #include <dirent.h> > ++#include <sys/types.h> > + > + #include "net-support.h" > + #include "pathnames.h" > diff --git a/meta-selftest/recipes-test/net-tools/net-tools/net-tools-config.h b/meta-selftest/recipes-test/net-tools/net-tools/net-tools-config.h > new file mode 100644 > index 0000000000..6d39c2a8cb > --- /dev/null > +++ b/meta-selftest/recipes-test/net-tools/net-tools/net-tools-config.h > @@ -0,0 +1,75 @@ > +/* > +* config.h Automatically generated configuration includefile > +* > +* NET-TOOLS A collection of programs that form the base set of the > +* NET-3 Networking Distribution for the LINUX operating > +* system. > +* > +* DO NOT EDIT DIRECTLY > +* > +*/ > + > +/* > + * > + * Internationalization > + * > + * The net-tools package has currently been translated to French, > + * German and Brazilian Portugese. Other translations are, of > + * course, welcome. Answer `n' here if you have no support for > + * internationalization on your system. > + * > + */ > +#define I18N 1 > + > +/* > + * > + * Protocol Families. > + * > + */ > +#define HAVE_AFUNIX 1 > +#define HAVE_AFINET 1 > +#define HAVE_AFINET6 1 > +#define HAVE_AFIPX 0 > +#define HAVE_AFATALK 0 > +#define HAVE_AFAX25 0 > +#define HAVE_AFNETROM 1 > +#define HAVE_AFROSE 0 > +#define HAVE_AFX25 0 > +#define HAVE_AFECONET 0 > +#define HAVE_AFDECnet 0 > +#define HAVE_AFASH 0 > + > +/* > + * > + * Device Hardware types. > + * > + */ > +#define HAVE_HWETHER 1 > +#define HAVE_HWARC 1 > +#define HAVE_HWSLIP 1 > +#define HAVE_HWPPP 1 > +#define HAVE_HWTUNNEL 1 > +#define HAVE_HWSTRIP 0 > +#define HAVE_HWTR 0 > +#define HAVE_HWAX25 0 > +#define HAVE_HWROSE 0 > +#define HAVE_HWNETROM 1 > +#define HAVE_HWX25 0 > +#define HAVE_HWFR 1 > +#define HAVE_HWSIT 0 > +#define HAVE_HWFDDI 0 > +#define HAVE_HWHIPPI 0 > +#define HAVE_HWASH 0 > +#define HAVE_HWHDLCLAPB 0 > +#define HAVE_HWIRDA 1 > +#define HAVE_HWEC 0 > +#define HAVE_HWIB 0 > + > +/* > + * > + * Other Features. > + * > + */ > +#define HAVE_FW_MASQUERADE 1 > +#define HAVE_IP_TOOLS 1 > +#define HAVE_MII 1 > diff --git a/meta-selftest/recipes-test/net-tools/net-tools/net-tools-config.make b/meta-selftest/recipes-test/net-tools/net-tools/net-tools-config.make > new file mode 100644 > index 0000000000..ec516f27ee > --- /dev/null > +++ b/meta-selftest/recipes-test/net-tools/net-tools/net-tools-config.make > @@ -0,0 +1,36 @@ > +I18N=1 > +HAVE_AFUNIX=1 > +HAVE_AFINET=1 > +HAVE_AFINET6=1 > +# HAVE_AFIPX=0 > +# HAVE_AFATALK=0 > +# HAVE_AFAX25=0 > +HAVE_AFNETROM=1 > +# HAVE_AFROSE=0 > +# HAVE_AFX25=0 > +# HAVE_AFECONET=0 > +# HAVE_AFDECnet=0 > +# HAVE_AFASH=0 > +HAVE_HWETHER=1 > +HAVE_HWARC=1 > +HAVE_HWSLIP=1 > +HAVE_HWPPP=1 > +HAVE_HWTUNNEL=1 > +HAVE_HWSTRIP=1 > +HAVE_HWTR=1 > +# HAVE_HWAX25=0 > +# HAVE_HWROSE=0 > +HAVE_HWNETROM=1 > +# HAVE_HWX25=0 > +HAVE_HWFR=1 > +# HAVE_HWSIT=0 > +# HAVE_HWFDDI=0 > +# HAVE_HWHIPPI=0 > +# HAVE_HWASH=0 > +# HAVE_HWHDLCLAPB=0 > +HAVE_HWIRDA=1 > +# HAVE_HWEC=0 > +# HAVE_HWIB=0 > +HAVE_FW_MASQUERADE=1 > +HAVE_IP_TOOLS=1 > +HAVE_MII=1 > diff --git a/meta-selftest/recipes-test/net-tools/net-tools_2.10.bb b/meta-selftest/recipes-test/net-tools/net-tools_2.10.bb > new file mode 100644 > index 0000000000..33304297ec > --- /dev/null > +++ b/meta-selftest/recipes-test/net-tools/net-tools_2.10.bb > @@ -0,0 +1,121 @@ > +SUMMARY = "Basic networking tools" > +DESCRIPTION = "A collection of programs that form the base set of the NET-3 networking distribution for the Linux operating system" > +HOMEPAGE = "http://net-tools.berlios.de/" > +BUGTRACKER = "http://bugs.debian.org/net-tools" > +LICENSE = "GPL-2.0-or-later" > +LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \ > + file://ifconfig.c;beginline=11;endline=15;md5=d1ca372080ad5401e23ca0afc35cf9ba" > + > +SRCREV = "80d7b95067f1f22fece9537dea6dff53081f4886" > +SRC_URI = "git://git.code.sf.net/p/net-tools/code;protocol=https;branch=master \ > + file://net-tools-config.h \ > + file://net-tools-config.make \ > + file://Add_missing_headers.patch \ > +" > + > +S = "${WORKDIR}/git" > + > +inherit gettext > + > +# The Makefile is lame, no parallel build > +PARALLEL_MAKE = "" > + > +PACKAGECONFIG ??= "hostname arp serial plip" > +PACKAGECONFIG[hostname] = "" > +PACKAGECONFIG[arp] = "" > +PACKAGECONFIG[serial] = "" > +PACKAGECONFIG[plip] = "" > +PACKAGECONFIG[slattach] = "" > +PACKAGECONFIG[plipconfig] = "" > + > +do_configure() { > + # net-tools has its own config mechanism requiring "make config" > + # we pre-generate desired options and copy to source directory instead > + cp ${WORKDIR}/net-tools-config.h ${S}/config.h > + cp ${WORKDIR}/net-tools-config.make ${S}/config.make > + > + if [ "${USE_NLS}" = "no" ]; then > + sed -i -e 's/^I18N=1/# I18N=1/' ${S}/config.make > + fi > + > + if ${@bb.utils.contains('PACKAGECONFIG', 'hostname', 'true', 'false', d)} ; then > + echo "#define HAVE_HOSTNAME_TOOLS 1" >> ${S}/config.h > + echo "#define HAVE_HOSTNAME_SYMLINKS 1" >> ${S}/config.h > + echo "HAVE_HOSTNAME_TOOLS=1" >> ${S}/config.make > + echo "HAVE_HOSTNAME_SYMLINKS=1" >> ${S}/config.make > + fi > + if ${@bb.utils.contains('PACKAGECONFIG', 'arp', 'true', 'false', d)} ; then > + echo "#define HAVE_ARP_TOOLS 1" >> ${S}/config.h > + echo "HAVE_ARP_TOOLS=1" >> ${S}/config.make > + fi > + if ${@bb.utils.contains('PACKAGECONFIG', 'serial', 'true', 'false', d)} ; then > + echo "#define HAVE_SERIAL_TOOLS 1" >> ${S}/config.h > + echo "HAVE_SERIAL_TOOLS=1" >> ${S}/config.make > + fi > + if ${@bb.utils.contains('PACKAGECONFIG', 'plip', 'true', 'false', d)} ; then > + echo "#define HAVE_PLIP_TOOLS 1" >> ${S}/config.h > + echo "HAVE_PLIP_TOOLS=1" >> ${S}/config.make > + fi > +} > + > +do_compile() { > + # net-tools use COPTS/LOPTS to allow adding custom options > + oe_runmake COPTS="$CFLAGS" LOPTS="$LDFLAGS" > +} > + > +do_install() { > + # We don't need COPTS or LOPTS, but let's be consistent. > + oe_runmake COPTS="$CFLAGS" LOPTS="$LDFLAGS" BASEDIR=${D} INSTALLNLSDIR=${D}${datadir}/locale mandir=${mandir} install > + > + if [ "${base_bindir}" != "/bin" ]; then > + mkdir -p ${D}/${base_bindir} > + mv ${D}/bin/* ${D}/${base_bindir}/ > + rmdir ${D}/bin > + fi > + if [ "${base_sbindir}" != "/sbin" ]; then > + mkdir ${D}/${base_sbindir} > + mv ${D}/sbin/* ${D}/${base_sbindir}/ > + rmdir ${D}/sbin > + fi > +} > + > +inherit update-alternatives > + > +base_sbindir_progs = "ipmaddr iptunnel mii-tool nameif \ > + ${@bb.utils.contains('PACKAGECONFIG', 'arp', 'arp rarp', '', d)} \ > + ${@bb.utils.contains('PACKAGECONFIG', 'plip', 'plipconfig', '', d)} \ > + ${@bb.utils.contains('PACKAGECONFIG', 'serial', 'slattach', '', d)} \ > +" > +base_bindir_progs = "ifconfig netstat route \ > + ${@bb.utils.contains('PACKAGECONFIG', 'hostname', 'dnsdomainname domainname hostname nisdomainname ypdomainname', '', d)} \ > +" > + > +ALTERNATIVE:${PN} = "${base_sbindir_progs} ${base_bindir_progs}" > +ALTERNATIVE:${PN}-doc += "${@bb.utils.contains('PACKAGECONFIG', 'hostname', 'hostname.1 dnsdomainname.1', '', d)}" > +ALTERNATIVE_LINK_NAME[hostname.1] = "${mandir}/man1/hostname.1" > +ALTERNATIVE_LINK_NAME[dnsdomainname.1] = "${mandir}/man1/dnsdomainname.1" > +ALTERNATIVE_PRIORITY[hostname.1] = "10" > + > +python __anonymous() { > + for prog in d.getVar('base_sbindir_progs').split(): > + d.setVarFlag('ALTERNATIVE_LINK_NAME', prog, '%s/%s' % (d.getVar('base_sbindir'), prog)) > + for prog in d.getVar('base_bindir_progs').split(): > + d.setVarFlag('ALTERNATIVE_LINK_NAME', prog, '%s/%s' % (d.getVar('base_bindir'), prog)) > +} > +ALTERNATIVE_PRIORITY = "100" > + > +NETTOOLS_PACKAGES = "${PN}-mii-tool" > +NETTOOLS_PACKAGES:class-native = "" > + > +PACKAGE_BEFORE_PN = "${NETTOOLS_PACKAGES}" > +RDEPENDS:${PN} += "${NETTOOLS_PACKAGES}" > + > +FILES:${PN}-mii-tool = "${base_sbindir}/mii-tool" > + > +ALTERNATIVE:${PN}:remove = "mii-tool" > + > +ALTERNATIVE:${PN}-mii-tool = "mii-tool" > +ALTERNATIVE_TARGET[mii-tool] = "${base_sbindir}/mii-tool" > +ALTERNATIVE_LINK_NAME[mii-tool] = "${base_sbindir}/mii-tool" > + > +BBCLASSEXTEND = "native nativesdk" I'm not sure we want to add a copy of net-tools to the selftest layer. This causes conflicts with the real net-tools recipe. Perhaps we can rename it to something different for the test? You can also likely simplify the recipe, e.g. remove the BBCLASSEXTEND and alternatives pieces, perhaps more. I doubt we need those for the test? Cheers, Richard
On Monday, 21 February 2022, 15:20:07 CET, Pavel Zhukov wrote: > There were few bugs in the _isInitialized() function which might trigger > git repo to be reinitialized and patches failing to apply. > > Signed-off-by: Pavel Zhukov <pavel.zhukov@huawei.com> > --- > .../net-tools/Add_missing_headers.patch | 15 +++ > .../net-tools/net-tools/net-tools-config.h | 75 +++++++++++ > .../net-tools/net-tools/net-tools-config.make | 36 ++++++ > .../recipes-test/net-tools/net-tools_2.10.bb | 121 ++++++++++++++++++ > meta/lib/oe/patch.py | 6 +- > meta/lib/oeqa/selftest/cases/bbtests.py | 20 ++- > 6 files changed, 268 insertions(+), 5 deletions(-) > create mode 100644 meta-selftest/recipes-test/net-tools/net-tools/Add_missing_headers.patch > create mode 100644 meta-selftest/recipes-test/net-tools/net-tools/net-tools-config.h > create mode 100644 meta-selftest/recipes-test/net-tools/net-tools/net-tools-config.make > create mode 100644 meta-selftest/recipes-test/net-tools/net-tools_2.10.bb > > [...] > > diff --git a/meta/lib/oe/patch.py b/meta/lib/oe/patch.py > index 950fe723dc..2163e336c2 100644 > --- a/meta/lib/oe/patch.py > +++ b/meta/lib/oe/patch.py > @@ -304,14 +304,14 @@ class GitApplyTree(PatchTree): > > def _isInitialized(self): > cmd = "git rev-parse --show-toplevel" > - (status, output) = subprocess.getstatusoutput(cmd.split()) > + (status, output) = subprocess.getstatusoutput(cmd) > ## Make sure repo is in builddir to not break top-level git repos > - return status == 0 and os.path.samedir(output, self.dir) > + return status == 0 and os.path.samefile(output, self.dir) I have the following variable values here: - status: 0 - output: /home/eggers/<...>/yocto - self.dir: /home/eggers/<...>/build/devel-kirkstone/tmp/work/orbiter-poky-linux-musleabi/linux-stable-rt/5.10.100-rt62-orbiter+gitAUTOINC+ca44e6dff2-r0/git So os.path.samefile() returns false and the existing Git repository is still reinitialized. regards Christian
diff --git a/meta-selftest/recipes-test/net-tools/net-tools/Add_missing_headers.patch b/meta-selftest/recipes-test/net-tools/net-tools/Add_missing_headers.patch new file mode 100644 index 0000000000..f15d3654c7 --- /dev/null +++ b/meta-selftest/recipes-test/net-tools/net-tools/Add_missing_headers.patch @@ -0,0 +1,15 @@ +Description: Add missing headers + +Upstream-Status: Pending +Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com> + +--- a/netstat.c ++++ b/netstat.c +@@ -88,6 +88,7 @@ + #include <sys/stat.h> + #include <net/if.h> + #include <dirent.h> ++#include <sys/types.h> + + #include "net-support.h" + #include "pathnames.h" diff --git a/meta-selftest/recipes-test/net-tools/net-tools/net-tools-config.h b/meta-selftest/recipes-test/net-tools/net-tools/net-tools-config.h new file mode 100644 index 0000000000..6d39c2a8cb --- /dev/null +++ b/meta-selftest/recipes-test/net-tools/net-tools/net-tools-config.h @@ -0,0 +1,75 @@ +/* +* config.h Automatically generated configuration includefile +* +* NET-TOOLS A collection of programs that form the base set of the +* NET-3 Networking Distribution for the LINUX operating +* system. +* +* DO NOT EDIT DIRECTLY +* +*/ + +/* + * + * Internationalization + * + * The net-tools package has currently been translated to French, + * German and Brazilian Portugese. Other translations are, of + * course, welcome. Answer `n' here if you have no support for + * internationalization on your system. + * + */ +#define I18N 1 + +/* + * + * Protocol Families. + * + */ +#define HAVE_AFUNIX 1 +#define HAVE_AFINET 1 +#define HAVE_AFINET6 1 +#define HAVE_AFIPX 0 +#define HAVE_AFATALK 0 +#define HAVE_AFAX25 0 +#define HAVE_AFNETROM 1 +#define HAVE_AFROSE 0 +#define HAVE_AFX25 0 +#define HAVE_AFECONET 0 +#define HAVE_AFDECnet 0 +#define HAVE_AFASH 0 + +/* + * + * Device Hardware types. + * + */ +#define HAVE_HWETHER 1 +#define HAVE_HWARC 1 +#define HAVE_HWSLIP 1 +#define HAVE_HWPPP 1 +#define HAVE_HWTUNNEL 1 +#define HAVE_HWSTRIP 0 +#define HAVE_HWTR 0 +#define HAVE_HWAX25 0 +#define HAVE_HWROSE 0 +#define HAVE_HWNETROM 1 +#define HAVE_HWX25 0 +#define HAVE_HWFR 1 +#define HAVE_HWSIT 0 +#define HAVE_HWFDDI 0 +#define HAVE_HWHIPPI 0 +#define HAVE_HWASH 0 +#define HAVE_HWHDLCLAPB 0 +#define HAVE_HWIRDA 1 +#define HAVE_HWEC 0 +#define HAVE_HWIB 0 + +/* + * + * Other Features. + * + */ +#define HAVE_FW_MASQUERADE 1 +#define HAVE_IP_TOOLS 1 +#define HAVE_MII 1 diff --git a/meta-selftest/recipes-test/net-tools/net-tools/net-tools-config.make b/meta-selftest/recipes-test/net-tools/net-tools/net-tools-config.make new file mode 100644 index 0000000000..ec516f27ee --- /dev/null +++ b/meta-selftest/recipes-test/net-tools/net-tools/net-tools-config.make @@ -0,0 +1,36 @@ +I18N=1 +HAVE_AFUNIX=1 +HAVE_AFINET=1 +HAVE_AFINET6=1 +# HAVE_AFIPX=0 +# HAVE_AFATALK=0 +# HAVE_AFAX25=0 +HAVE_AFNETROM=1 +# HAVE_AFROSE=0 +# HAVE_AFX25=0 +# HAVE_AFECONET=0 +# HAVE_AFDECnet=0 +# HAVE_AFASH=0 +HAVE_HWETHER=1 +HAVE_HWARC=1 +HAVE_HWSLIP=1 +HAVE_HWPPP=1 +HAVE_HWTUNNEL=1 +HAVE_HWSTRIP=1 +HAVE_HWTR=1 +# HAVE_HWAX25=0 +# HAVE_HWROSE=0 +HAVE_HWNETROM=1 +# HAVE_HWX25=0 +HAVE_HWFR=1 +# HAVE_HWSIT=0 +# HAVE_HWFDDI=0 +# HAVE_HWHIPPI=0 +# HAVE_HWASH=0 +# HAVE_HWHDLCLAPB=0 +HAVE_HWIRDA=1 +# HAVE_HWEC=0 +# HAVE_HWIB=0 +HAVE_FW_MASQUERADE=1 +HAVE_IP_TOOLS=1 +HAVE_MII=1 diff --git a/meta-selftest/recipes-test/net-tools/net-tools_2.10.bb b/meta-selftest/recipes-test/net-tools/net-tools_2.10.bb new file mode 100644 index 0000000000..33304297ec --- /dev/null +++ b/meta-selftest/recipes-test/net-tools/net-tools_2.10.bb @@ -0,0 +1,121 @@ +SUMMARY = "Basic networking tools" +DESCRIPTION = "A collection of programs that form the base set of the NET-3 networking distribution for the Linux operating system" +HOMEPAGE = "http://net-tools.berlios.de/" +BUGTRACKER = "http://bugs.debian.org/net-tools" +LICENSE = "GPL-2.0-or-later" +LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \ + file://ifconfig.c;beginline=11;endline=15;md5=d1ca372080ad5401e23ca0afc35cf9ba" + +SRCREV = "80d7b95067f1f22fece9537dea6dff53081f4886" +SRC_URI = "git://git.code.sf.net/p/net-tools/code;protocol=https;branch=master \ + file://net-tools-config.h \ + file://net-tools-config.make \ + file://Add_missing_headers.patch \ +" + +S = "${WORKDIR}/git" + +inherit gettext + +# The Makefile is lame, no parallel build +PARALLEL_MAKE = "" + +PACKAGECONFIG ??= "hostname arp serial plip" +PACKAGECONFIG[hostname] = "" +PACKAGECONFIG[arp] = "" +PACKAGECONFIG[serial] = "" +PACKAGECONFIG[plip] = "" +PACKAGECONFIG[slattach] = "" +PACKAGECONFIG[plipconfig] = "" + +do_configure() { + # net-tools has its own config mechanism requiring "make config" + # we pre-generate desired options and copy to source directory instead + cp ${WORKDIR}/net-tools-config.h ${S}/config.h + cp ${WORKDIR}/net-tools-config.make ${S}/config.make + + if [ "${USE_NLS}" = "no" ]; then + sed -i -e 's/^I18N=1/# I18N=1/' ${S}/config.make + fi + + if ${@bb.utils.contains('PACKAGECONFIG', 'hostname', 'true', 'false', d)} ; then + echo "#define HAVE_HOSTNAME_TOOLS 1" >> ${S}/config.h + echo "#define HAVE_HOSTNAME_SYMLINKS 1" >> ${S}/config.h + echo "HAVE_HOSTNAME_TOOLS=1" >> ${S}/config.make + echo "HAVE_HOSTNAME_SYMLINKS=1" >> ${S}/config.make + fi + if ${@bb.utils.contains('PACKAGECONFIG', 'arp', 'true', 'false', d)} ; then + echo "#define HAVE_ARP_TOOLS 1" >> ${S}/config.h + echo "HAVE_ARP_TOOLS=1" >> ${S}/config.make + fi + if ${@bb.utils.contains('PACKAGECONFIG', 'serial', 'true', 'false', d)} ; then + echo "#define HAVE_SERIAL_TOOLS 1" >> ${S}/config.h + echo "HAVE_SERIAL_TOOLS=1" >> ${S}/config.make + fi + if ${@bb.utils.contains('PACKAGECONFIG', 'plip', 'true', 'false', d)} ; then + echo "#define HAVE_PLIP_TOOLS 1" >> ${S}/config.h + echo "HAVE_PLIP_TOOLS=1" >> ${S}/config.make + fi +} + +do_compile() { + # net-tools use COPTS/LOPTS to allow adding custom options + oe_runmake COPTS="$CFLAGS" LOPTS="$LDFLAGS" +} + +do_install() { + # We don't need COPTS or LOPTS, but let's be consistent. + oe_runmake COPTS="$CFLAGS" LOPTS="$LDFLAGS" BASEDIR=${D} INSTALLNLSDIR=${D}${datadir}/locale mandir=${mandir} install + + if [ "${base_bindir}" != "/bin" ]; then + mkdir -p ${D}/${base_bindir} + mv ${D}/bin/* ${D}/${base_bindir}/ + rmdir ${D}/bin + fi + if [ "${base_sbindir}" != "/sbin" ]; then + mkdir ${D}/${base_sbindir} + mv ${D}/sbin/* ${D}/${base_sbindir}/ + rmdir ${D}/sbin + fi +} + +inherit update-alternatives + +base_sbindir_progs = "ipmaddr iptunnel mii-tool nameif \ + ${@bb.utils.contains('PACKAGECONFIG', 'arp', 'arp rarp', '', d)} \ + ${@bb.utils.contains('PACKAGECONFIG', 'plip', 'plipconfig', '', d)} \ + ${@bb.utils.contains('PACKAGECONFIG', 'serial', 'slattach', '', d)} \ +" +base_bindir_progs = "ifconfig netstat route \ + ${@bb.utils.contains('PACKAGECONFIG', 'hostname', 'dnsdomainname domainname hostname nisdomainname ypdomainname', '', d)} \ +" + +ALTERNATIVE:${PN} = "${base_sbindir_progs} ${base_bindir_progs}" +ALTERNATIVE:${PN}-doc += "${@bb.utils.contains('PACKAGECONFIG', 'hostname', 'hostname.1 dnsdomainname.1', '', d)}" +ALTERNATIVE_LINK_NAME[hostname.1] = "${mandir}/man1/hostname.1" +ALTERNATIVE_LINK_NAME[dnsdomainname.1] = "${mandir}/man1/dnsdomainname.1" +ALTERNATIVE_PRIORITY[hostname.1] = "10" + +python __anonymous() { + for prog in d.getVar('base_sbindir_progs').split(): + d.setVarFlag('ALTERNATIVE_LINK_NAME', prog, '%s/%s' % (d.getVar('base_sbindir'), prog)) + for prog in d.getVar('base_bindir_progs').split(): + d.setVarFlag('ALTERNATIVE_LINK_NAME', prog, '%s/%s' % (d.getVar('base_bindir'), prog)) +} +ALTERNATIVE_PRIORITY = "100" + +NETTOOLS_PACKAGES = "${PN}-mii-tool" +NETTOOLS_PACKAGES:class-native = "" + +PACKAGE_BEFORE_PN = "${NETTOOLS_PACKAGES}" +RDEPENDS:${PN} += "${NETTOOLS_PACKAGES}" + +FILES:${PN}-mii-tool = "${base_sbindir}/mii-tool" + +ALTERNATIVE:${PN}:remove = "mii-tool" + +ALTERNATIVE:${PN}-mii-tool = "mii-tool" +ALTERNATIVE_TARGET[mii-tool] = "${base_sbindir}/mii-tool" +ALTERNATIVE_LINK_NAME[mii-tool] = "${base_sbindir}/mii-tool" + +BBCLASSEXTEND = "native nativesdk" diff --git a/meta/lib/oe/patch.py b/meta/lib/oe/patch.py index 950fe723dc..2163e336c2 100644 --- a/meta/lib/oe/patch.py +++ b/meta/lib/oe/patch.py @@ -304,14 +304,14 @@ class GitApplyTree(PatchTree): def _isInitialized(self): cmd = "git rev-parse --show-toplevel" - (status, output) = subprocess.getstatusoutput(cmd.split()) + (status, output) = subprocess.getstatusoutput(cmd) ## Make sure repo is in builddir to not break top-level git repos - return status == 0 and os.path.samedir(output, self.dir) + return status == 0 and os.path.samefile(output, self.dir) def _initRepo(self): runcmd("git init".split(), self.dir) runcmd("git add .".split(), self.dir) - runcmd("git commit -a --allow-empty -m Patching_started".split(), self.dir) + runcmd("git commit -a --allow-empty -m bitbake_patching_started".split(), self.dir) @staticmethod def extractPatchHeader(patchfile): diff --git a/meta/lib/oeqa/selftest/cases/bbtests.py b/meta/lib/oeqa/selftest/cases/bbtests.py index ce72c4bcc6..ae3f230038 100644 --- a/meta/lib/oeqa/selftest/cases/bbtests.py +++ b/meta/lib/oeqa/selftest/cases/bbtests.py @@ -307,11 +307,27 @@ INHERIT:remove = \"report-error\" src = get_bb_var("SRC_URI",test_recipe) gitscm = re.search("git://", src) self.assertFalse(gitscm, "test_git_patchtool pre-condition failed: {} test recipe contains git repo!".format(test_recipe)) - result = bitbake('man-db -c patch', ignore_status=False) + result = bitbake('{} -c patch'.format(test_recipe), ignore_status=False) fatal = re.search("fatal: not a git repository (or any of the parent directories)", result.output) self.assertFalse(fatal, "Failed to patch using PATCHTOOL=\"git\"") self.delete_recipeinc(test_recipe) - bitbake('-cclean man-db') + bitbake('-cclean {}'.format(test_recipe)) + + def test_git_patchtool2(self): + """ Test if PATCHTOOL=git works with git repo and doesn't reinitialize it + """ + test_recipe = "net-tools" + self.write_recipeinc(test_recipe, 'PATCHTOOL=\"git\"') + src = get_bb_var("SRC_URI",test_recipe) + gitscm = re.search("git://", src) + self.assertTrue(gitscm, "test_git_patchtool pre-condition failed: {} test recipe doesn't contains git repo!".format(test_recipe)) + result = bitbake('{} -c patch'.format(test_recipe), ignore_status=False) + srcdir = get_bb_var('S', test_recipe) + result = runCmd("git log", cwd = srcdir) + self.assertFalse("bitbake_patching_started" in result.output, msg = "Repository has been reinitialized. {}".format(srcdir)) + self.delete_recipeinc(test_recipe) + bitbake('-cclean {}'.format(test_recipe)) + def test_git_unpack_nonetwork(self): """
There were few bugs in the _isInitialized() function which might trigger git repo to be reinitialized and patches failing to apply. Signed-off-by: Pavel Zhukov <pavel.zhukov@huawei.com> --- .../net-tools/Add_missing_headers.patch | 15 +++ .../net-tools/net-tools/net-tools-config.h | 75 +++++++++++ .../net-tools/net-tools/net-tools-config.make | 36 ++++++ .../recipes-test/net-tools/net-tools_2.10.bb | 121 ++++++++++++++++++ meta/lib/oe/patch.py | 6 +- meta/lib/oeqa/selftest/cases/bbtests.py | 20 ++- 6 files changed, 268 insertions(+), 5 deletions(-) create mode 100644 meta-selftest/recipes-test/net-tools/net-tools/Add_missing_headers.patch create mode 100644 meta-selftest/recipes-test/net-tools/net-tools/net-tools-config.h create mode 100644 meta-selftest/recipes-test/net-tools/net-tools/net-tools-config.make create mode 100644 meta-selftest/recipes-test/net-tools/net-tools_2.10.bb