* [PATCH] kbuild: gitignore output directory @ 2019-01-30 11:14 Vladimir Kondratiev 2019-02-01 4:18 ` Masahiro Yamada 0 siblings, 1 reply; 8+ messages in thread From: Vladimir Kondratiev @ 2019-01-30 11:14 UTC (permalink / raw) To: Masahiro Yamada, Michal Marek Cc: Vladimir Kondratiev, linux-kbuild, linux-kernel When compiling into output directory using O=, many files created under KBUILD_OUTPUT that git considers as new ones; git clients, ex. "git gui" lists it, and it clutters file list making it difficult to see what was really changed Generate .gitignore in output directory that ignores all its content Signed-off-by: Vladimir Kondratiev <vladimir.kondratiev@linux.intel.com> --- Makefile | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Makefile b/Makefile index 141653226f3c..ee66ea28869b 100644 --- a/Makefile +++ b/Makefile @@ -483,10 +483,13 @@ PHONY += outputmakefile # outputmakefile generates a Makefile in the output directory, if using a # separate output directory. This allows convenient use of make in the # output directory. +# At the same time when output Makefile generated, generate .gitignore to +# ignore whole output directory outputmakefile: ifneq ($(KBUILD_SRC),) $(Q)ln -fsn $(srctree) source $(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile $(srctree) + echo "# this is build directory, ignore it\n*" > .gitignore endif ifneq ($(shell $(CC) --version 2>&1 | head -n 1 | grep clang),) -- 2.19.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH] kbuild: gitignore output directory 2019-01-30 11:14 [PATCH] kbuild: gitignore output directory Vladimir Kondratiev @ 2019-02-01 4:18 ` Masahiro Yamada 2019-02-03 8:48 ` [PATCH v2] " Vladimir Kondratiev 2019-02-03 8:50 ` [PATCH] " Vladimir Kondratiev 0 siblings, 2 replies; 8+ messages in thread From: Masahiro Yamada @ 2019-02-01 4:18 UTC (permalink / raw) To: Vladimir Kondratiev Cc: Michal Marek, Linux Kbuild mailing list, Linux Kernel Mailing List On Wed, Jan 30, 2019 at 8:15 PM Vladimir Kondratiev <vladimir.kondratiev@linux.intel.com> wrote: > > When compiling into output directory using O=, many files > created under KBUILD_OUTPUT that git considers > as new ones; git clients, ex. "git gui" lists it, and it clutters > file list making it difficult to see what was really changed > > Generate .gitignore in output directory that ignores all > its content > > Signed-off-by: Vladimir Kondratiev <vladimir.kondratiev@linux.intel.com> > --- > Makefile | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/Makefile b/Makefile > index 141653226f3c..ee66ea28869b 100644 > --- a/Makefile > +++ b/Makefile > @@ -483,10 +483,13 @@ PHONY += outputmakefile > # outputmakefile generates a Makefile in the output directory, if using a > # separate output directory. This allows convenient use of make in the > # output directory. > +# At the same time when output Makefile generated, generate .gitignore to > +# ignore whole output directory > outputmakefile: > ifneq ($(KBUILD_SRC),) > $(Q)ln -fsn $(srctree) source > $(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile $(srctree) > + echo "# this is build directory, ignore it\n*" > .gitignore > endif > > ifneq ($(shell $(CC) --version 2>&1 | head -n 1 | grep clang),) > -- > 2.19.1 > The idea looks OK to me. The implementation must be improved. You need to add $(Q) to suppress the annoying command echo. Also, this patch does not work for all distributions because echo "\n" is not portable. GNU Make runs recipes in /bin/sh (unless SHELL variable is changed), but the implementation of /bin/sh depends on distributions. This patch works on Ubuntu etc. because /bin/sh is a symbolic link to dash. But, in some distributions, /bin/sh is a symbolic link to bash. Docker is useful for quick tests of various distributions. :) See the result of echo "hello\nworld" [Ubuntu] foo@8ad1275125c5:~$ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=18.10 DISTRIB_CODENAME=cosmic DISTRIB_DESCRIPTION="Ubuntu 18.10" foo@8ad1275125c5:~$ ls -l /bin/sh lrwxrwxrwx 1 root root 4 Nov 14 23:00 /bin/sh -> dash foo@8ad1275125c5:~$ /bin/sh $ type echo echo is a shell builtin $ echo "hello\nworld" hello world [CentOS] [foo@c3fbaa4b6f72 ~]$ cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) [foo@c3fbaa4b6f72 ~]$ ls -l /bin/sh lrwxrwxrwx 1 root root 4 Dec 5 01:36 /bin/sh -> bash [foo@c3fbaa4b6f72 ~]$ /bin/sh sh-4.2$ type echo echo is a shell builtin sh-4.2$ echo "hello\nworld" hello\nworld On example for workaround might be: diff --git a/Makefile b/Makefile index ee66ea2..010c1c6 100644 --- a/Makefile +++ b/Makefile @@ -489,7 +489,7 @@ outputmakefile: ifneq ($(KBUILD_SRC),) $(Q)ln -fsn $(srctree) source $(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile $(srctree) - echo "# this is build directory, ignore it\n*" > .gitignore + $(Q){ echo "# this is build directory, ignore it"; echo "*"; } > .gitignore endif ifneq ($(shell $(CC) --version 2>&1 | head -n 1 | grep clang),) -- Best Regards Masahiro Yamada ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v2] kbuild: gitignore output directory 2019-02-01 4:18 ` Masahiro Yamada @ 2019-02-03 8:48 ` Vladimir Kondratiev 2019-02-05 8:15 ` Masahiro Yamada 2019-03-22 15:52 ` Andre Przywara 2019-02-03 8:50 ` [PATCH] " Vladimir Kondratiev 1 sibling, 2 replies; 8+ messages in thread From: Vladimir Kondratiev @ 2019-02-03 8:48 UTC (permalink / raw) To: Masahiro Yamada, Michal Marek Cc: Vladimir Kondratiev, linux-kbuild, linux-kernel From: Vladimir Kondratiev <vladimir.kondratiev@linux.intel.com> When compiling into output directory using O=, many files created under KBUILD_OUTPUT that git considers as new ones; git clients, ex. "git gui" lists it, and it clutters file list making it difficult to see what was really changed Generate .gitignore in output directory that ignores all its content Signed-off-by: Vladimir Kondratiev <vladimir.kondratiev@linux.intel.com> --- Makefile | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Makefile b/Makefile index 141653226f3c..b1d651e822b1 100644 --- a/Makefile +++ b/Makefile @@ -483,10 +483,13 @@ PHONY += outputmakefile # outputmakefile generates a Makefile in the output directory, if using a # separate output directory. This allows convenient use of make in the # output directory. +# At the same time when output Makefile generated, generate .gitignore to +# ignore whole output directory outputmakefile: ifneq ($(KBUILD_SRC),) $(Q)ln -fsn $(srctree) source $(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile $(srctree) + $(Q){ echo "# this is build directory, ignore it"; echo "*"; } > .gitignore endif ifneq ($(shell $(CC) --version 2>&1 | head -n 1 | grep clang),) -- 2.19.1 --------------------------------------------------------------------- Intel Israel (74) Limited This e-mail and any attachments may contain confidential material for the sole use of the intended recipient(s). Any review or distribution by others is strictly prohibited. If you are not the intended recipient, please contact the sender and delete all copies. ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v2] kbuild: gitignore output directory 2019-02-03 8:48 ` [PATCH v2] " Vladimir Kondratiev @ 2019-02-05 8:15 ` Masahiro Yamada 2019-03-22 15:52 ` Andre Przywara 1 sibling, 0 replies; 8+ messages in thread From: Masahiro Yamada @ 2019-02-05 8:15 UTC (permalink / raw) To: Vladimir Kondratiev Cc: Michal Marek, Vladimir Kondratiev, Linux Kbuild mailing list, Linux Kernel Mailing List On Sun, Feb 3, 2019 at 5:50 PM Vladimir Kondratiev <vladimir.kondratiev@intel.com> wrote: > > From: Vladimir Kondratiev <vladimir.kondratiev@linux.intel.com> > > When compiling into output directory using O=, many files > created under KBUILD_OUTPUT that git considers > as new ones; git clients, ex. "git gui" lists it, and it clutters > file list making it difficult to see what was really changed > > Generate .gitignore in output directory that ignores all > its content > > Signed-off-by: Vladimir Kondratiev <vladimir.kondratiev@linux.intel.com> > --- Applied to linux-kbuild. Thanks. > Makefile | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/Makefile b/Makefile > index 141653226f3c..b1d651e822b1 100644 > --- a/Makefile > +++ b/Makefile > @@ -483,10 +483,13 @@ PHONY += outputmakefile > # outputmakefile generates a Makefile in the output directory, if using a > # separate output directory. This allows convenient use of make in the > # output directory. > +# At the same time when output Makefile generated, generate .gitignore to > +# ignore whole output directory > outputmakefile: > ifneq ($(KBUILD_SRC),) > $(Q)ln -fsn $(srctree) source > $(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile $(srctree) > + $(Q){ echo "# this is build directory, ignore it"; echo "*"; } > .gitignore > endif > > ifneq ($(shell $(CC) --version 2>&1 | head -n 1 | grep clang),) > -- > 2.19.1 > > --------------------------------------------------------------------- > Intel Israel (74) Limited > > This e-mail and any attachments may contain confidential material for > the sole use of the intended recipient(s). Any review or distribution > by others is strictly prohibited. If you are not the intended > recipient, please contact the sender and delete all copies. > -- Best Regards Masahiro Yamada ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v2] kbuild: gitignore output directory 2019-02-03 8:48 ` [PATCH v2] " Vladimir Kondratiev 2019-02-05 8:15 ` Masahiro Yamada @ 2019-03-22 15:52 ` Andre Przywara 2019-03-24 2:22 ` Masahiro Yamada 1 sibling, 1 reply; 8+ messages in thread From: Andre Przywara @ 2019-03-22 15:52 UTC (permalink / raw) To: Vladimir Kondratiev, Masahiro Yamada; +Cc: linux-kernel Hi, > When compiling into output directory using O=, many files > created under KBUILD_OUTPUT that git considers > as new ones; git clients, ex. "git gui" lists it, and it clutters > file list making it difficult to see what was really changed > > Generate .gitignore in output directory that ignores all > its content just found this when testing -rc1. Unfortunately this breaks my setup, because I keep a totally separate git repository in my build directories to track (various versions of) .config. So .gitignore there is carefully crafted to ignore most build artefacts, but not .config, for instance. I am not sure how git would interact with the build directory for you? Do you build into a subdirectory of the kernel tree? I was hoping that we would not overwrite unrelated files in directories outside of the kernel tree. In case this is about a subdirectory of the source tree, can we somehow check for this case? Cheers, Andre. > > Signed-off-by: Vladimir Kondratiev <vladimir.kondratiev@linux.intel.com> > Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> > --- > Makefile | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/Makefile b/Makefile > index 97ee0be24d52..d487fca342c4 100644 > --- a/Makefile > +++ b/Makefile > @@ -483,10 +483,13 @@ PHONY += outputmakefile > # outputmakefile generates a Makefile in the output directory, if using a > # separate output directory. This allows convenient use of make in the > # output directory. > +# At the same time when output Makefile generated, generate .gitignore to > +# ignore whole output directory > outputmakefile: > ifneq ($(KBUILD_SRC),) > $(Q)ln -fsn $(srctree) source > $(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile $(srctree) > + $(Q){ echo "# this is build directory, ignore it"; echo "*"; } > .gitignore > endif > > ifneq ($(shell $(CC) --version 2>&1 | head -n 1 | grep clang),) > -- > 2.17.1 ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v2] kbuild: gitignore output directory 2019-03-22 15:52 ` Andre Przywara @ 2019-03-24 2:22 ` Masahiro Yamada 2019-03-25 10:47 ` Andre Przywara 0 siblings, 1 reply; 8+ messages in thread From: Masahiro Yamada @ 2019-03-24 2:22 UTC (permalink / raw) To: Andre Przywara; +Cc: Vladimir Kondratiev, Linux Kernel Mailing List On Sat, Mar 23, 2019 at 12:53 AM Andre Przywara <andre.przywara@arm.com> wrote: > > Hi, > > > When compiling into output directory using O=, many files > > created under KBUILD_OUTPUT that git considers > > as new ones; git clients, ex. "git gui" lists it, and it clutters > > file list making it difficult to see what was really changed > > > > Generate .gitignore in output directory that ignores all > > its content > > just found this when testing -rc1. > Unfortunately this breaks my setup, because I keep a totally separate > git repository in my build directories to track (various versions of) > .config. So .gitignore there is carefully crafted to ignore most build > artefacts, but not .config, for instance. > > I am not sure how git would interact with the build directory for you? > Do you build into a subdirectory of the kernel tree? > > I was hoping that we would not overwrite unrelated files in directories > outside of the kernel tree. In case this is about a subdirectory of the > source tree, can we somehow check for this case? I am not sure if it is worthwhile adjusting the upstream kernel to the workflow of an individual like this. If it is, we could like this: outputmakefile: ifneq ($(KBUILD_SRC),) $(Q)ln -fsn $(srctree) source $(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile $(srctree) $(Q)test -e .gitignore || \ { echo "# this is build directory, ignore it"; echo "*"; } > .gitignore endif > Cheers, > Andre. > > > > > Signed-off-by: Vladimir Kondratiev <vladimir.kondratiev@linux.intel.com> > > Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> > > --- > > Makefile | 3 +++ > > 1 file changed, 3 insertions(+) > > > > diff --git a/Makefile b/Makefile > > index 97ee0be24d52..d487fca342c4 100644 > > --- a/Makefile > > +++ b/Makefile > > @@ -483,10 +483,13 @@ PHONY += outputmakefile > > # outputmakefile generates a Makefile in the output directory, if using a > > # separate output directory. This allows convenient use of make in the > > # output directory. > > +# At the same time when output Makefile generated, generate .gitignore to > > +# ignore whole output directory > > outputmakefile: > > ifneq ($(KBUILD_SRC),) > > $(Q)ln -fsn $(srctree) source > > $(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile $(srctree) > > + $(Q){ echo "# this is build directory, ignore it"; echo "*"; } > .gitignore > > endif > > > > ifneq ($(shell $(CC) --version 2>&1 | head -n 1 | grep clang),) > > -- > > 2.17.1 > -- Best Regards Masahiro Yamada ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v2] kbuild: gitignore output directory 2019-03-24 2:22 ` Masahiro Yamada @ 2019-03-25 10:47 ` Andre Przywara 0 siblings, 0 replies; 8+ messages in thread From: Andre Przywara @ 2019-03-25 10:47 UTC (permalink / raw) To: Masahiro Yamada; +Cc: Vladimir Kondratiev, Linux Kernel Mailing List On Sun, 24 Mar 2019 11:22:11 +0900 Masahiro Yamada <yamada.masahiro@socionext.com> wrote: Hi Masahiro, > On Sat, Mar 23, 2019 at 12:53 AM Andre Przywara <andre.przywara@arm.com> wrote: > > > > Hi, > > > > > When compiling into output directory using O=, many files > > > created under KBUILD_OUTPUT that git considers > > > as new ones; git clients, ex. "git gui" lists it, and it clutters > > > file list making it difficult to see what was really changed > > > > > > Generate .gitignore in output directory that ignores all > > > its content > > > > just found this when testing -rc1. > > Unfortunately this breaks my setup, because I keep a totally separate > > git repository in my build directories to track (various versions of) > > .config. So .gitignore there is carefully crafted to ignore most build > > artefacts, but not .config, for instance. > > > > I am not sure how git would interact with the build directory for you? > > Do you build into a subdirectory of the kernel tree? > > > > I was hoping that we would not overwrite unrelated files in directories > > outside of the kernel tree. In case this is about a subdirectory of the > > source tree, can we somehow check for this case? > > > I am not sure if it is worthwhile > adjusting the upstream kernel to > the workflow of an individual like this. I would argue that we should not overwrite files in the build directory which are unrelated to the actual kernel *build*. Another point is that one could easily add the build (sub-)directory to .git/info/exclude to make git ignore it, without touching any git monitored file at all. But I couldn't find an easy way to keep my .gitignore file in place. > If it is, we could like this: > > outputmakefile: > ifneq ($(KBUILD_SRC),) > $(Q)ln -fsn $(srctree) source > $(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile $(srctree) > $(Q)test -e .gitignore || \ > { echo "# this is build directory, ignore it"; echo "*"; } > .gitignore Thanks, that looks good and fixes it for me! Cheers, Andre. > endif > > > > Cheers, > > Andre. > > > > > > > > Signed-off-by: Vladimir Kondratiev <vladimir.kondratiev@linux.intel.com> > > > Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> > > > --- > > > Makefile | 3 +++ > > > 1 file changed, 3 insertions(+) > > > > > > diff --git a/Makefile b/Makefile > > > index 97ee0be24d52..d487fca342c4 100644 > > > --- a/Makefile > > > +++ b/Makefile > > > @@ -483,10 +483,13 @@ PHONY += outputmakefile > > > # outputmakefile generates a Makefile in the output directory, if using a > > > # separate output directory. This allows convenient use of make in the > > > # output directory. > > > +# At the same time when output Makefile generated, generate .gitignore to > > > +# ignore whole output directory > > > outputmakefile: > > > ifneq ($(KBUILD_SRC),) > > > $(Q)ln -fsn $(srctree) source > > > $(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile $(srctree) > > > + $(Q){ echo "# this is build directory, ignore it"; echo "*"; } > .gitignore > > > endif > > > > > > ifneq ($(shell $(CC) --version 2>&1 | head -n 1 | grep clang),) > > > -- > > > 2.17.1 > > > > ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] kbuild: gitignore output directory 2019-02-01 4:18 ` Masahiro Yamada 2019-02-03 8:48 ` [PATCH v2] " Vladimir Kondratiev @ 2019-02-03 8:50 ` Vladimir Kondratiev 1 sibling, 0 replies; 8+ messages in thread From: Vladimir Kondratiev @ 2019-02-03 8:50 UTC (permalink / raw) To: Masahiro Yamada Cc: Michal Marek, Linux Kbuild mailing list, Linux Kernel Mailing List Agree; sending v2 On 2/1/19 6:18 AM, Masahiro Yamada wrote: > On Wed, Jan 30, 2019 at 8:15 PM Vladimir Kondratiev > <vladimir.kondratiev@linux.intel.com> wrote: >> >> When compiling into output directory using O=, many files >> created under KBUILD_OUTPUT that git considers >> as new ones; git clients, ex. "git gui" lists it, and it clutters >> file list making it difficult to see what was really changed >> >> Generate .gitignore in output directory that ignores all >> its content >> >> Signed-off-by: Vladimir Kondratiev <vladimir.kondratiev@linux.intel.com> >> --- >> Makefile | 3 +++ >> 1 file changed, 3 insertions(+) >> >> diff --git a/Makefile b/Makefile >> index 141653226f3c..ee66ea28869b 100644 >> --- a/Makefile >> +++ b/Makefile >> @@ -483,10 +483,13 @@ PHONY += outputmakefile >> # outputmakefile generates a Makefile in the output directory, if using a >> # separate output directory. This allows convenient use of make in the >> # output directory. >> +# At the same time when output Makefile generated, generate .gitignore to >> +# ignore whole output directory >> outputmakefile: >> ifneq ($(KBUILD_SRC),) >> $(Q)ln -fsn $(srctree) source >> $(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile $(srctree) >> + echo "# this is build directory, ignore it\n*" > .gitignore >> endif >> >> ifneq ($(shell $(CC) --version 2>&1 | head -n 1 | grep clang),) >> -- >> 2.19.1 >> > > > The idea looks OK to me. > The implementation must be improved. > > > You need to add $(Q) to suppress the annoying command echo. > > Also, this patch does not work for all distributions because > echo "\n" > is not portable. > > > > GNU Make runs recipes in /bin/sh (unless SHELL variable is changed), > but the implementation of /bin/sh depends on distributions. > > > This patch works on Ubuntu etc. > because /bin/sh is a symbolic link to dash. > > > But, in some distributions, > /bin/sh is a symbolic link to bash. > > > > Docker is useful for quick tests of > various distributions. :) > > See the result of echo "hello\nworld" > > > [Ubuntu] > > foo@8ad1275125c5:~$ cat /etc/lsb-release > DISTRIB_ID=Ubuntu > DISTRIB_RELEASE=18.10 > DISTRIB_CODENAME=cosmic > DISTRIB_DESCRIPTION="Ubuntu 18.10" > foo@8ad1275125c5:~$ ls -l /bin/sh > lrwxrwxrwx 1 root root 4 Nov 14 23:00 /bin/sh -> dash > foo@8ad1275125c5:~$ /bin/sh > $ type echo > echo is a shell builtin > $ echo "hello\nworld" > hello > world > > > > > [CentOS] > > > [foo@c3fbaa4b6f72 ~]$ cat /etc/redhat-release > CentOS Linux release 7.6.1810 (Core) > [foo@c3fbaa4b6f72 ~]$ ls -l /bin/sh > lrwxrwxrwx 1 root root 4 Dec 5 01:36 /bin/sh -> bash > [foo@c3fbaa4b6f72 ~]$ /bin/sh > sh-4.2$ type echo > echo is a shell builtin > sh-4.2$ echo "hello\nworld" > hello\nworld > > > > > > On example for workaround might be: > > diff --git a/Makefile b/Makefile > index ee66ea2..010c1c6 100644 > --- a/Makefile > +++ b/Makefile > @@ -489,7 +489,7 @@ outputmakefile: > ifneq ($(KBUILD_SRC),) > $(Q)ln -fsn $(srctree) source > $(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile $(srctree) > - echo "# this is build directory, ignore it\n*" > .gitignore > + $(Q){ echo "# this is build directory, ignore it"; echo "*"; } >> .gitignore > endif > > ifneq ($(shell $(CC) --version 2>&1 | head -n 1 | grep clang),) > > > > > > ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2019-03-25 10:48 UTC | newest] Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2019-01-30 11:14 [PATCH] kbuild: gitignore output directory Vladimir Kondratiev 2019-02-01 4:18 ` Masahiro Yamada 2019-02-03 8:48 ` [PATCH v2] " Vladimir Kondratiev 2019-02-05 8:15 ` Masahiro Yamada 2019-03-22 15:52 ` Andre Przywara 2019-03-24 2:22 ` Masahiro Yamada 2019-03-25 10:47 ` Andre Przywara 2019-02-03 8:50 ` [PATCH] " Vladimir Kondratiev
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.