Branch | Commit message | Author | Age |
master | Manage also Wayland session in MCC | Aurelian R | 3 weeks |
user/jibz/aarch64 | fix(install): grub2-efi was not found using default_bootloader() | Jybz | 8 months |
distro/mga9 | 18.66 | Martin Whitaker | 16 months |
user/pterjan/arm64 | foo | Pascal Terjan | 19 months |
distro/mga8 | drakxtools/stage2: 18.45: update NEWS | Thomas Backlund | 4 years |
distro/mga7 | 18.21.1 | Thomas Backlund | 5 years |
distro/mga6 | 17.88.3 | Martin Whitaker | 6 years |
topic/extlinux | bootloader: add cma=256M@512M for Raspberry Pi DRM/VC4 | Olivier Blin | 7 years |
topic/switching_to_dnf | perl-install/pkgs.pm: Port 'urpme' call to 'dnf remove' call | Neal Gompa | 7 years |
distro/mga5 | Fix the display of the clock in drakclock (mga#11776) | Frédéric Buclin | 8 years |
user/ennael/mga6 | - Add 60-block.rules in the installer (mga#20074) | Nicolas Lécureuil | 8 years |
user/martinw/mga6 | Always tell the kernel about partition table changes when running the classic... | Martin Whitaker | 8 years |
user/animtim/designWork | new icons for harddrake categories | Timothée Giet | 9 years |
distro/mga4 | fix moving fonts (mga#16074) | Thierry Vignaud | 10 years |
topic/bug-13680 | make_boot_img: Avoid gfxboot install string for chain.c32 | Erwan Velu | 10 years |
user/erwan/bug-13680 | make_boot_img: Avoid gfxboot install string for chain.c32 | Erwan Velu | 10 years |
topic/efi | sync with code | Thierry Vignaud | 11 years |
distro/mga3 | Slovenian translation updated | filip | 11 years |
user/colin/rescue-systemd | images: Pass audit=0 to the rescue system. | Colin Guthrie | 11 years |
distro/mga2 | SVN_SILENT Ukrainian translation update | Yuri Chornoivan | 12 years |
distro/mga1 | Ukrainian translation update | Yuri Chornoivan | 12 years |
distro/mes5-2.6.33 | Revert as it breaks auto_inst | Nicolas Lécureuil | 12 years |
distro/mes6 | fix unused-but-set-variable | Antoine Ginies | 14 years |
distro/mes5 | fix installing from hard drive on cciss (#57973) | Antoine Ginies | 14 years |
distro/mdv2009.0 | increase version | Pascal Terjan | 15 years |
distro/mdv2010.0 | - detect_devices: | Olivier Blin | 15 years |
distro/mdv2008.0 | run_program: set XAUTHORITY and HOME for the user we will drop privileges to | Pascal Terjan | 15 years |
distro/mdv2008.1 | run_program: set XAUTHORITY and HOME for the user we will drop privileges to | Pascal Terjan | 15 years |
distro/mdv2009.1 | run_program: set XAUTHORITY and HOME for the user we will drop privileges to | Pascal Terjan | 15 years |
topic/switching_to_urpmi | (rpmDbOpen) make it more readable | Thierry Vignaud | 16 years |
topic/before_matchbox_wm | 2009.0 beta 1 logo | Thierry Vignaud | 16 years |
topic/MDK-2006_0-update | Add stex and e1000_ng | Pascal Terjan | 17 years |
distro/mdv2007.1 | - fix range max value >2TB when creating a partition (useful for LVs >2TB) | Pascal Rigaux | 17 years |
topic/mlcd4 | copy 2007.1 as mlcd4 branch (for drakauth changes) | Olivier Blin | 18 years |
topic/MDK-10-update | Better (and fix) SMP detection, aka. also check for populated & enabled CPU | Gwenolé Beauchesne | 19 years |
topic/MDK-10_2-update | package lsb is requiring many locales though we don't want it to be installed | Pascal Rigaux | 19 years |
topic/MDK-10_1-update | Fix mis-sorted progress bars | Stew Benedict | 19 years |
topic/a | This commit was manufactured by cvs2svn to create branch 'a'. | Mystery Man | 20 years |
topic/mandrakesoft | This commit was manufactured by cvs2svn to create branch 'mandrakesoft'. | Mystery Man | 21 years |
topic/MDK92-branch | workaround anthil bug #369 | Thierry Vignaud | 21 years |
topic/Corpo_2_1 | Corporate Server 2.1.1 release | Nicolas Planel | 21 years |
topic/KA9_0 | Removing sundance | Erwan Velu | 21 years |
topic/R9_0-64bit-branch | no imm/ppa on ia64 | Gwenolé Beauchesne | 21 years |
topic/MDKC_1_0 | This commit was manufactured by cvs2svn to create branch 'MDKC_1_0'. | Mystery Man | 21 years |
topic/R9_1_HP-branch | This commit was manufactured by cvs2svn to create branch | Mystery Man | 22 years |
topic/x86_64-branch | More xf86 modules for x86-64 | Gwenolé Beauchesne | 22 years |
topic/gdk-pixbuf-0-branch | - lots of cleanups | Thierry Vignaud | 22 years |
topic/ia64-8_1 | - Don't forget to link the initrd to the real image in /boot/efi/ too | Gwenolé Beauchesne | 23 years |
topic/PCMCIA_CS_DISTRO | This commit was manufactured by cvs2svn to create branch | Mystery Man | 23 years |
topic/v_webmin_0_87 | This commit was manufactured by cvs2svn to create branch | Mystery Man | 23 years |
topic/gi-ppc | This commit was manufactured by cvs2svn to create branch 'gi-ppc'. | Mystery Man | 24 years |
topic/rp-pppoe | This commit was manufactured by cvs2svn to create branch 'rp-pppoe'. | Mystery Man | 24 years |
topic/ppp | This commit was manufactured by cvs2svn to create branch 'ppp'. | Mystery Man | 24 years |
topic/dietlibc | This commit was manufactured by cvs2svn to create branch 'dietlibc'. | Mystery Man | 24 years |
topic/firewall | readded passwd. Must verify that it's secure vs msec. | damien | 24 years |
topic/unlabeled-1.1.1 | branch to build the firewall install. | damien | 24 years |
|
Tag | Download | Author | Age |
18.68 | drakx-18.68.tar drakx-18.68.tar.gz drakx-18.68.tar.bz2 drakx-18.68.tar.xz drakx-18.68.zip | Jani Välimaa | 8 months |
18.67 | drakx-18.67.tar drakx-18.67.tar.gz drakx-18.67.tar.bz2 drakx-18.67.tar.xz drakx-18.67.zip | Dan Fandrich | 12 months |
drakx-installer-images-2.91 | drakx-installer-images-2.91.tar drakx-installer-images-2.91.tar.gz drakx-installer-images-2.91.tar.bz2 drakx-installer-images-2.91.tar.xz drakx-installer-images-2.91.zip | Thomas Backlund | 16 months |
18.66 | drakx-18.66.tar drakx-18.66.tar.gz drakx-18.66.tar.bz2 drakx-18.66.tar.xz drakx-18.66.zip | Martin Whitaker | 16 months |
2.90 | drakx-2.90.tar drakx-2.90.tar.gz drakx-2.90.tar.bz2 drakx-2.90.tar.xz drakx-2.90.zip | Thomas Backlund | 17 months |
18.64 | drakx-18.64.tar drakx-18.64.tar.gz drakx-18.64.tar.bz2 drakx-18.64.tar.xz drakx-18.64.zip | Martin Whitaker | 18 months |
18.63 | drakx-18.63.tar drakx-18.63.tar.gz drakx-18.63.tar.bz2 drakx-18.63.tar.xz drakx-18.63.zip | Giuseppe Ghibò | 19 months |
1.67 | drakx-1.67.tar drakx-1.67.tar.gz drakx-1.67.tar.bz2 drakx-1.67.tar.xz drakx-1.67.zip | Martin Whitaker | 20 months |
18.62 | drakx-18.62.tar drakx-18.62.tar.gz drakx-18.62.tar.bz2 drakx-18.62.tar.xz drakx-18.62.zip | Martin Whitaker | 20 months |
18.61 | drakx-18.61.tar drakx-18.61.tar.gz drakx-18.61.tar.bz2 drakx-18.61.tar.xz drakx-18.61.zip | Martin Whitaker | 20 months |
18.60 | drakx-18.60.tar drakx-18.60.tar.gz drakx-18.60.tar.bz2 drakx-18.60.tar.xz drakx-18.60.zip | Martin Whitaker | 20 months |
18.59 | drakx-18.59.tar drakx-18.59.tar.gz drakx-18.59.tar.bz2 drakx-18.59.tar.xz drakx-18.59.zip | Giuseppe Ghibò | 21 months |
18.58 | drakx-18.58.tar drakx-18.58.tar.gz drakx-18.58.tar.bz2 drakx-18.58.tar.xz drakx-18.58.zip | Giuseppe Ghibò | 21 months |
18.57 | drakx-18.57.tar drakx-18.57.tar.gz drakx-18.57.tar.bz2 drakx-18.57.tar.xz drakx-18.57.zip | Martin Whitaker | 21 months |
18.56 | drakx-18.56.tar drakx-18.56.tar.gz drakx-18.56.tar.bz2 drakx-18.56.tar.xz drakx-18.56.zip | Thomas Backlund | 23 months |
drakx-installer-images-2.88 | drakx-installer-images-2.88.tar drakx-installer-images-2.88.tar.gz drakx-installer-images-2.88.tar.bz2 drakx-installer-images-2.88.tar.xz drakx-installer-images-2.88.zip | Thomas Backlund | 23 months |
drakx-installer-binaries-2.60 | drakx-installer-binaries-2.60.tar drakx-installer-binaries-2.60.tar.gz drakx-installer-binaries-2.60.tar.bz2 drakx-installer-binaries-2.60.tar.xz drakx-installer-binaries-2.60.zip | Thomas Backlund | 23 months |
18.55 | drakx-18.55.tar drakx-18.55.tar.gz drakx-18.55.tar.bz2 drakx-18.55.tar.xz drakx-18.55.zip | Pascal Terjan | 23 months |
18.54 | drakx-18.54.tar drakx-18.54.tar.gz drakx-18.54.tar.bz2 drakx-18.54.tar.xz drakx-18.54.zip | Martin Whitaker | 24 months |
18.53 | drakx-18.53.tar drakx-18.53.tar.gz drakx-18.53.tar.bz2 drakx-18.53.tar.xz drakx-18.53.zip | Martin Whitaker | 2 years |
18.52 | drakx-18.52.tar drakx-18.52.tar.gz drakx-18.52.tar.bz2 drakx-18.52.tar.xz drakx-18.52.zip | Martin Whitaker | 2 years |
2.87 | drakx-2.87.tar drakx-2.87.tar.gz drakx-2.87.tar.bz2 drakx-2.87.tar.xz drakx-2.87.zip | Martin Whitaker | 2 years |
18.51 | drakx-18.51.tar drakx-18.51.tar.gz drakx-18.51.tar.bz2 drakx-18.51.tar.xz drakx-18.51.zip | Martin Whitaker | 2 years |
2.86 | drakx-2.86.tar drakx-2.86.tar.gz drakx-2.86.tar.bz2 drakx-2.86.tar.xz drakx-2.86.zip | Martin Whitaker | 2 years |
18.50 | drakx-18.50.tar drakx-18.50.tar.gz drakx-18.50.tar.bz2 drakx-18.50.tar.xz drakx-18.50.zip | Martin Whitaker | 2 years |
18.48 | drakx-18.48.tar drakx-18.48.tar.gz drakx-18.48.tar.bz2 drakx-18.48.tar.xz drakx-18.48.zip | Thierry Vignaud | 3 years |
2.59 | drakx-2.59.tar drakx-2.59.tar.gz drakx-2.59.tar.bz2 drakx-2.59.tar.xz drakx-2.59.zip | Thierry Vignaud | 3 years |
2.57 | drakx-2.57.tar drakx-2.57.tar.gz drakx-2.57.tar.bz2 drakx-2.57.tar.xz drakx-2.57.zip | Thierry Vignaud | 3 years |
18.47 | drakx-18.47.tar drakx-18.47.tar.gz drakx-18.47.tar.bz2 drakx-18.47.tar.xz drakx-18.47.zip | Thierry Vignaud | 3 years |
18.46 | drakx-18.46.tar drakx-18.46.tar.gz drakx-18.46.tar.bz2 drakx-18.46.tar.xz drakx-18.46.zip | Thierry Vignaud | 4 years |
2.83 | drakx-2.83.tar drakx-2.83.tar.gz drakx-2.83.tar.bz2 drakx-2.83.tar.xz drakx-2.83.zip | Thomas Backlund | 4 years |
18.45 | drakx-18.45.tar drakx-18.45.tar.gz drakx-18.45.tar.bz2 drakx-18.45.tar.xz drakx-18.45.zip | Thomas Backlund | 4 years |
2.56 | drakx-2.56.tar drakx-2.56.tar.gz drakx-2.56.tar.bz2 drakx-2.56.tar.xz drakx-2.56.zip | Thomas Backlund | 4 years |
18.44 | drakx-18.44.tar drakx-18.44.tar.gz drakx-18.44.tar.bz2 drakx-18.44.tar.xz drakx-18.44.zip | Donald Stewart | 4 years |
2.82 | drakx-2.82.tar drakx-2.82.tar.gz drakx-2.82.tar.bz2 drakx-2.82.tar.xz drakx-2.82.zip | Thomas Backlund | 4 years |
18.43 | drakx-18.43.tar drakx-18.43.tar.gz drakx-18.43.tar.bz2 drakx-18.43.tar.xz drakx-18.43.zip | Martin Whitaker | 4 years |
18.42 | drakx-18.42.tar drakx-18.42.tar.gz drakx-18.42.tar.bz2 drakx-18.42.tar.xz drakx-18.42.zip | Martin Whitaker | 4 years |
18.40 | drakx-18.40.tar drakx-18.40.tar.gz drakx-18.40.tar.bz2 drakx-18.40.tar.xz drakx-18.40.zip | Martin Whitaker | 4 years |
2.81 | drakx-2.81.tar drakx-2.81.tar.gz drakx-2.81.tar.bz2 drakx-2.81.tar.xz drakx-2.81.zip | Thomas Backlund | 4 years |
2.55 | drakx-2.55.tar drakx-2.55.tar.gz drakx-2.55.tar.bz2 drakx-2.55.tar.xz drakx-2.55.zip | Thomas Backlund | 4 years |
18.39 | drakx-18.39.tar drakx-18.39.tar.gz drakx-18.39.tar.bz2 drakx-18.39.tar.xz drakx-18.39.zip | Nicolas Lécureuil | 4 years |
18.38 | drakx-18.38.tar drakx-18.38.tar.gz drakx-18.38.tar.bz2 drakx-18.38.tar.xz drakx-18.38.zip | Thierry Vignaud | 4 years |
18.37 | drakx-18.37.tar drakx-18.37.tar.gz drakx-18.37.tar.bz2 drakx-18.37.tar.xz drakx-18.37.zip | Thierry Vignaud | 4 years |
2.78 | drakx-2.78.tar drakx-2.78.tar.gz drakx-2.78.tar.bz2 drakx-2.78.tar.xz drakx-2.78.zip | Martin Whitaker | 4 years |
2.77 | drakx-2.77.tar drakx-2.77.tar.gz drakx-2.77.tar.bz2 drakx-2.77.tar.xz drakx-2.77.zip | Martin Whitaker | 4 years |
2.76 | drakx-2.76.tar drakx-2.76.tar.gz drakx-2.76.tar.bz2 drakx-2.76.tar.xz drakx-2.76.zip | Martin Whitaker | 4 years |
2.50 | drakx-2.50.tar drakx-2.50.tar.gz drakx-2.50.tar.bz2 drakx-2.50.tar.xz drakx-2.50.zip | Martin Whitaker | 4 years |
18.36 | drakx-18.36.tar drakx-18.36.tar.gz drakx-18.36.tar.bz2 drakx-18.36.tar.xz drakx-18.36.zip | Thierry Vignaud | 4 years |
18.35 | drakx-18.35.tar drakx-18.35.tar.gz drakx-18.35.tar.bz2 drakx-18.35.tar.xz drakx-18.35.zip | Thierry Vignaud | 4 years |
18.34 | drakx-18.34.tar drakx-18.34.tar.gz drakx-18.34.tar.bz2 drakx-18.34.tar.xz drakx-18.34.zip | Thierry Vignaud | 4 years |
18.33 | drakx-18.33.tar drakx-18.33.tar.gz drakx-18.33.tar.bz2 drakx-18.33.tar.xz drakx-18.33.zip | Thierry Vignaud | 4 years |
18.32 | drakx-18.32.tar drakx-18.32.tar.gz drakx-18.32.tar.bz2 drakx-18.32.tar.xz drakx-18.32.zip | Martin Whitaker | 5 years |
18.31 | drakx-18.31.tar drakx-18.31.tar.gz drakx-18.31.tar.bz2 drakx-18.31.tar.xz drakx-18.31.zip | Martin Whitaker | 5 years |
1.65 | drakx-1.65.tar drakx-1.65.tar.gz drakx-1.65.tar.bz2 drakx-1.65.tar.xz drakx-1.65.zip | Thierry Vignaud | 5 years |
18.30 | drakx-18.30.tar drakx-18.30.tar.gz drakx-18.30.tar.bz2 drakx-18.30.tar.xz drakx-18.30.zip | Martin Whitaker | 5 years |
18.29 | drakx-18.29.tar drakx-18.29.tar.gz drakx-18.29.tar.bz2 drakx-18.29.tar.xz drakx-18.29.zip | Martin Whitaker | 5 years |
18.28 | drakx-18.28.tar drakx-18.28.tar.gz drakx-18.28.tar.bz2 drakx-18.28.tar.xz drakx-18.28.zip | Martin Whitaker | 5 years |
18.27.1 | drakx-18.27.1.tar drakx-18.27.1.tar.gz drakx-18.27.1.tar.bz2 drakx-18.27.1.tar.xz drakx-18.27.1.zip | Thomas Backlund | 5 years |
18.27 | drakx-18.27.tar drakx-18.27.tar.gz drakx-18.27.tar.bz2 drakx-18.27.tar.xz drakx-18.27.zip | Thierry Vignaud | 5 years |
1.64 | drakx-1.64.tar drakx-1.64.tar.gz drakx-1.64.tar.bz2 drakx-1.64.tar.xz drakx-1.64.zip | Thierry Vignaud | 5 years |
18.26 | drakx-18.26.tar drakx-18.26.tar.gz drakx-18.26.tar.bz2 drakx-18.26.tar.xz drakx-18.26.zip | Thierry Vignaud | 5 years |
1.63 | drakx-1.63.tar drakx-1.63.tar.gz drakx-1.63.tar.bz2 drakx-1.63.tar.xz drakx-1.63.zip | Thierry Vignaud | 5 years |
18.25 | drakx-18.25.tar drakx-18.25.tar.gz drakx-18.25.tar.bz2 drakx-18.25.tar.xz drakx-18.25.zip | Thierry Vignaud | 5 years |
18.24 | drakx-18.24.tar drakx-18.24.tar.gz drakx-18.24.tar.bz2 drakx-18.24.tar.xz drakx-18.24.zip | Martin Whitaker | 5 years |
18.23 | drakx-18.23.tar drakx-18.23.tar.gz drakx-18.23.tar.bz2 drakx-18.23.tar.xz drakx-18.23.zip | Thierry Vignaud | 5 years |
2.42 | drakx-2.42.tar drakx-2.42.tar.gz drakx-2.42.tar.bz2 drakx-2.42.tar.xz drakx-2.42.zip | Thomas Backlund | 5 years |
2.69 | drakx-2.69.tar drakx-2.69.tar.gz drakx-2.69.tar.bz2 drakx-2.69.tar.xz drakx-2.69.zip | Thomas Backlund | 5 years |
18.22 | drakx-18.22.tar drakx-18.22.tar.gz drakx-18.22.tar.bz2 drakx-18.22.tar.xz drakx-18.22.zip | Thierry Vignaud | 5 years |
2.67 | drakx-2.67.tar drakx-2.67.tar.gz drakx-2.67.tar.bz2 drakx-2.67.tar.xz drakx-2.67.zip | Thomas Backlund | 6 years |
1.62 | drakx-1.62.tar drakx-1.62.tar.gz drakx-1.62.tar.bz2 drakx-1.62.tar.xz drakx-1.62.zip | Thomas Backlund | 6 years |
18.20 | drakx-18.20.tar drakx-18.20.tar.gz drakx-18.20.tar.bz2 drakx-18.20.tar.xz drakx-18.20.zip | Thomas Backlund | 6 years |
2.66 | drakx-2.66.tar drakx-2.66.tar.gz drakx-2.66.tar.bz2 drakx-2.66.tar.xz drakx-2.66.zip | Thomas Backlund | 6 years |
2.40 | drakx-2.40.tar drakx-2.40.tar.gz drakx-2.40.tar.bz2 drakx-2.40.tar.xz drakx-2.40.zip | Thomas Backlund | 6 years |
2.65 | drakx-2.65.tar drakx-2.65.tar.gz drakx-2.65.tar.bz2 drakx-2.65.tar.xz drakx-2.65.zip | Thomas Backlund | 6 years |
2.64 | drakx-2.64.tar drakx-2.64.tar.gz drakx-2.64.tar.bz2 drakx-2.64.tar.xz drakx-2.64.zip | Martin Whitaker | 6 years |
2.63 | drakx-2.63.tar drakx-2.63.tar.gz drakx-2.63.tar.bz2 drakx-2.63.tar.xz drakx-2.63.zip | Martin Whitaker | 6 years |
2.62 | drakx-2.62.tar drakx-2.62.tar.gz drakx-2.62.tar.bz2 drakx-2.62.tar.xz drakx-2.62.zip | Martin Whitaker | 6 years |
18.19 | drakx-18.19.tar drakx-18.19.tar.gz drakx-18.19.tar.bz2 drakx-18.19.tar.xz drakx-18.19.zip | Martin Whitaker | 6 years |
2.61 | drakx-2.61.tar drakx-2.61.tar.gz drakx-2.61.tar.bz2 drakx-2.61.tar.xz drakx-2.61.zip | Martin Whitaker | 6 years |
18.17 | drakx-18.17.tar drakx-18.17.tar.gz drakx-18.17.tar.bz2 drakx-18.17.tar.xz drakx-18.17.zip | Jani Välimaa | 6 years |
1.61 | drakx-1.61.tar drakx-1.61.tar.gz drakx-1.61.tar.bz2 drakx-1.61.tar.xz drakx-1.61.zip | Thomas Backlund | 6 years |
18.16 | drakx-18.16.tar drakx-18.16.tar.gz drakx-18.16.tar.bz2 drakx-18.16.tar.xz drakx-18.16.zip | Thomas Backlund | 6 years |
2.60 | drakx-2.60.tar drakx-2.60.tar.gz drakx-2.60.tar.bz2 drakx-2.60.tar.xz drakx-2.60.zip | Thomas Backlund | 6 years |
2.39 | drakx-2.39.tar drakx-2.39.tar.gz drakx-2.39.tar.bz2 drakx-2.39.tar.xz drakx-2.39.zip | Thomas Backlund | 6 years |
18.15 | drakx-18.15.tar drakx-18.15.tar.gz drakx-18.15.tar.bz2 drakx-18.15.tar.xz drakx-18.15.zip | Thierry Vignaud | 6 years |
18.14 | drakx-18.14.tar drakx-18.14.tar.gz drakx-18.14.tar.bz2 drakx-18.14.tar.xz drakx-18.14.zip | Thierry Vignaud | 6 years |
18.13 | drakx-18.13.tar drakx-18.13.tar.gz drakx-18.13.tar.bz2 drakx-18.13.tar.xz drakx-18.13.zip | Martin Whitaker | 6 years |
2.58 | drakx-2.58.tar drakx-2.58.tar.gz drakx-2.58.tar.bz2 drakx-2.58.tar.xz drakx-2.58.zip | Martin Whitaker | 6 years |
18.12 | drakx-18.12.tar drakx-18.12.tar.gz drakx-18.12.tar.bz2 drakx-18.12.tar.xz drakx-18.12.zip | Martin Whitaker | 6 years |
18.11 | drakx-18.11.tar drakx-18.11.tar.gz drakx-18.11.tar.bz2 drakx-18.11.tar.xz drakx-18.11.zip | Martin Whitaker | 6 years |
18.10 | drakx-18.10.tar drakx-18.10.tar.gz drakx-18.10.tar.bz2 drakx-18.10.tar.xz drakx-18.10.zip | Martin Whitaker | 6 years |
2.36 | drakx-2.36.tar drakx-2.36.tar.gz drakx-2.36.tar.bz2 drakx-2.36.tar.xz drakx-2.36.zip | Martin Whitaker | 6 years |
18.9 | drakx-18.9.tar drakx-18.9.tar.gz drakx-18.9.tar.bz2 drakx-18.9.tar.xz drakx-18.9.zip | Martin Whitaker | 6 years |
18.8.1 | drakx-18.8.1.tar drakx-18.8.1.tar.gz drakx-18.8.1.tar.bz2 drakx-18.8.1.tar.xz drakx-18.8.1.zip | Thomas Backlund | 6 years |
2.33 | drakx-2.33.tar drakx-2.33.tar.gz drakx-2.33.tar.bz2 drakx-2.33.tar.xz drakx-2.33.zip | Thierry Vignaud | 6 years |
18.8 | drakx-18.8.tar drakx-18.8.tar.gz drakx-18.8.tar.bz2 drakx-18.8.tar.xz drakx-18.8.zip | Thierry Vignaud | 6 years |
18.7 | drakx-18.7.tar drakx-18.7.tar.gz drakx-18.7.tar.bz2 drakx-18.7.tar.xz drakx-18.7.zip | Thierry Vignaud | 6 years |
1.60 | drakx-1.60.tar drakx-1.60.tar.gz drakx-1.60.tar.bz2 drakx-1.60.tar.xz drakx-1.60.zip | Thierry Vignaud | 6 years |
18.6 | drakx-18.6.tar drakx-18.6.tar.gz drakx-18.6.tar.bz2 drakx-18.6.tar.xz drakx-18.6.zip | Thierry Vignaud | 6 years |
18.5 | drakx-18.5.tar drakx-18.5.tar.gz drakx-18.5.tar.bz2 drakx-18.5.tar.xz drakx-18.5.zip | Thierry Vignaud | 6 years |
2.54 | drakx-2.54.tar drakx-2.54.tar.gz drakx-2.54.tar.bz2 drakx-2.54.tar.xz drakx-2.54.zip | Martin Whitaker | 6 years |
2.32 | drakx-2.32.tar drakx-2.32.tar.gz drakx-2.32.tar.bz2 drakx-2.32.tar.xz drakx-2.32.zip | Martin Whitaker | 6 years |
18.4 | drakx-18.4.tar drakx-18.4.tar.gz drakx-18.4.tar.bz2 drakx-18.4.tar.xz drakx-18.4.zip | Martin Whitaker | 6 years |
18.2 | drakx-18.2.tar drakx-18.2.tar.gz drakx-18.2.tar.bz2 drakx-18.2.tar.xz drakx-18.2.zip | Thomas Backlund | 6 years |
18.1 | drakx-18.1.tar drakx-18.1.tar.gz drakx-18.1.tar.bz2 drakx-18.1.tar.xz drakx-18.1.zip | Thierry Vignaud | 6 years |
1.59 | drakx-1.59.tar drakx-1.59.tar.gz drakx-1.59.tar.bz2 drakx-1.59.tar.xz drakx-1.59.zip | Thomas Backlund | 6 years |
1.58 | drakx-1.58.tar drakx-1.58.tar.gz drakx-1.58.tar.bz2 drakx-1.58.tar.xz drakx-1.58.zip | Thomas Backlund | 6 years |
18.0 | drakx-18.0.tar drakx-18.0.tar.gz drakx-18.0.tar.bz2 drakx-18.0.tar.xz drakx-18.0.zip | Thierry Vignaud | 6 years |
17.88.3 | drakx-17.88.3.tar drakx-17.88.3.tar.gz drakx-17.88.3.tar.bz2 drakx-17.88.3.tar.xz drakx-17.88.3.zip | Martin Whitaker | 6 years |
17.99 | drakx-17.99.tar drakx-17.99.tar.gz drakx-17.99.tar.bz2 drakx-17.99.tar.xz drakx-17.99.zip | Thierry Vignaud | 6 years |
2.46.3 | drakx-2.46.3.tar drakx-2.46.3.tar.gz drakx-2.46.3.tar.bz2 drakx-2.46.3.tar.xz drakx-2.46.3.zip | Thomas Backlund | 6 years |
2.24.2 | drakx-2.24.2.tar drakx-2.24.2.tar.gz drakx-2.24.2.tar.bz2 drakx-2.24.2.tar.xz drakx-2.24.2.zip | Thomas Backlund | 6 years |
2.52 | drakx-2.52.tar drakx-2.52.tar.gz drakx-2.52.tar.bz2 drakx-2.52.tar.xz drakx-2.52.zip | Thomas Backlund | 6 years |
2.30 | drakx-2.30.tar drakx-2.30.tar.gz drakx-2.30.tar.bz2 drakx-2.30.tar.xz drakx-2.30.zip | Thomas Backlund | 6 years |
2.51 | drakx-2.51.tar drakx-2.51.tar.gz drakx-2.51.tar.bz2 drakx-2.51.tar.xz drakx-2.51.zip | Thomas Backlund | 6 years |
2.29 | drakx-2.29.tar drakx-2.29.tar.gz drakx-2.29.tar.bz2 drakx-2.29.tar.xz drakx-2.29.zip | Thomas Backlund | 6 years |
17.98 | drakx-17.98.tar drakx-17.98.tar.gz drakx-17.98.tar.bz2 drakx-17.98.tar.xz drakx-17.98.zip | Thierry Vignaud | 7 years |
12.75e36beb8669302615274ffbb013ac2c92605cafa6 | drakx-12.75e36beb8669302615274ffbb013ac2c92605cafa6.tar drakx-12.75e36beb8669302615274ffbb013ac2c92605cafa6.tar.gz drakx-12.75e36beb8669302615274ffbb013ac2c92605cafa6.tar.bz2 drakx-12.75e36beb8669302615274ffbb013ac2c92605cafa6.tar.xz drakx-12.75e36beb8669302615274ffbb013ac2c92605cafa6.zip | Thierry Vignaud | 7 years |
17.97 | drakx-17.97.tar drakx-17.97.tar.gz drakx-17.97.tar.bz2 drakx-17.97.tar.xz drakx-17.97.zip | Thierry Vignaud | 7 years |
17.88.2 | drakx-17.88.2.tar drakx-17.88.2.tar.gz drakx-17.88.2.tar.bz2 drakx-17.88.2.tar.xz drakx-17.88.2.zip | Martin Whitaker | 7 years |
17.96 | drakx-17.96.tar drakx-17.96.tar.gz drakx-17.96.tar.bz2 drakx-17.96.tar.xz drakx-17.96.zip | Martin Whitaker | 7 years |
1.57 | drakx-1.57.tar drakx-1.57.tar.gz drakx-1.57.tar.bz2 drakx-1.57.tar.xz drakx-1.57.zip | Thierry Vignaud | 7 years |
17.95 | drakx-17.95.tar drakx-17.95.tar.gz drakx-17.95.tar.bz2 drakx-17.95.tar.xz drakx-17.95.zip | Thierry Vignaud | 7 years |
17.94 | drakx-17.94.tar drakx-17.94.tar.gz drakx-17.94.tar.bz2 drakx-17.94.tar.xz drakx-17.94.zip | Thierry Vignaud | 7 years |
1.56 | drakx-1.56.tar drakx-1.56.tar.gz drakx-1.56.tar.bz2 drakx-1.56.tar.xz drakx-1.56.zip | Thomas Backlund | 7 years |
17.93 | drakx-17.93.tar drakx-17.93.tar.gz drakx-17.93.tar.bz2 drakx-17.93.tar.xz drakx-17.93.zip | Thomas Backlund | 7 years |
2.48 | drakx-2.48.tar drakx-2.48.tar.gz drakx-2.48.tar.bz2 drakx-2.48.tar.xz drakx-2.48.zip | Thomas Backlund | 7 years |
2.26 | drakx-2.26.tar drakx-2.26.tar.gz drakx-2.26.tar.bz2 drakx-2.26.tar.xz drakx-2.26.zip | Thomas Backlund | 7 years |
17.92 | drakx-17.92.tar drakx-17.92.tar.gz drakx-17.92.tar.bz2 drakx-17.92.tar.xz drakx-17.92.zip | Thomas Backlund | 7 years |
17.91 | drakx-17.91.tar drakx-17.91.tar.gz drakx-17.91.tar.bz2 drakx-17.91.tar.xz drakx-17.91.zip | Thierry Vignaud | 7 years |
17.88.1 | drakx-17.88.1.tar drakx-17.88.1.tar.gz drakx-17.88.1.tar.bz2 drakx-17.88.1.tar.xz drakx-17.88.1.zip | Thierry Vignaud | 7 years |
17.90 | drakx-17.90.tar drakx-17.90.tar.gz drakx-17.90.tar.bz2 drakx-17.90.tar.xz drakx-17.90.zip | Thierry Vignaud | 7 years |
17.89 | drakx-17.89.tar drakx-17.89.tar.gz drakx-17.89.tar.bz2 drakx-17.89.tar.xz drakx-17.89.zip | Thierry Vignaud | 7 years |
17.88 | drakx-17.88.tar drakx-17.88.tar.gz drakx-17.88.tar.bz2 drakx-17.88.tar.xz drakx-17.88.zip | Thomas Backlund | 7 years |
17.87 | drakx-17.87.tar drakx-17.87.tar.gz drakx-17.87.tar.bz2 drakx-17.87.tar.xz drakx-17.87.zip | Anne Nicolas | 8 years |
17.86 | drakx-17.86.tar drakx-17.86.tar.gz drakx-17.86.tar.bz2 drakx-17.86.tar.xz drakx-17.86.zip | Martin Whitaker | 8 years |
17.85 | drakx-17.85.tar drakx-17.85.tar.gz drakx-17.85.tar.bz2 drakx-17.85.tar.xz drakx-17.85.zip | Thierry Vignaud | 8 years |
17.84 | drakx-17.84.tar drakx-17.84.tar.gz drakx-17.84.tar.bz2 drakx-17.84.tar.xz drakx-17.84.zip | Rémi Verschelde | 8 years |
17.83 | drakx-17.83.tar drakx-17.83.tar.gz drakx-17.83.tar.bz2 drakx-17.83.tar.xz drakx-17.83.zip | Thierry Vignaud | 8 years |
17.82 | drakx-17.82.tar drakx-17.82.tar.gz drakx-17.82.tar.bz2 drakx-17.82.tar.xz drakx-17.82.zip | Martin Whitaker | 8 years |
17.81 | drakx-17.81.tar drakx-17.81.tar.gz drakx-17.81.tar.bz2 drakx-17.81.tar.xz drakx-17.81.zip | Rémi Verschelde | 8 years |
17.80 | drakx-17.80.tar drakx-17.80.tar.gz drakx-17.80.tar.bz2 drakx-17.80.tar.xz drakx-17.80.zip | Rémi Verschelde | 8 years |
17.79 | drakx-17.79.tar drakx-17.79.tar.gz drakx-17.79.tar.bz2 drakx-17.79.tar.xz drakx-17.79.zip | Thomas Backlund | 8 years |
17.78 | drakx-17.78.tar drakx-17.78.tar.gz drakx-17.78.tar.bz2 drakx-17.78.tar.xz drakx-17.78.zip | Anne Nicolas | 8 years |
17.77 | drakx-17.77.tar drakx-17.77.tar.gz drakx-17.77.tar.bz2 drakx-17.77.tar.xz drakx-17.77.zip | Rémi Verschelde | 8 years |
17.76 | drakx-17.76.tar drakx-17.76.tar.gz drakx-17.76.tar.bz2 drakx-17.76.tar.xz drakx-17.76.zip | Thierry Vignaud | 8 years |
17.75 | drakx-17.75.tar drakx-17.75.tar.gz drakx-17.75.tar.bz2 drakx-17.75.tar.xz drakx-17.75.zip | Thierry Vignaud | 8 years |
17.74 | drakx-17.74.tar drakx-17.74.tar.gz drakx-17.74.tar.bz2 drakx-17.74.tar.xz drakx-17.74.zip | Jani Välimaa | 8 years |
17.73 | drakx-17.73.tar drakx-17.73.tar.gz drakx-17.73.tar.bz2 drakx-17.73.tar.xz drakx-17.73.zip | Thierry Vignaud | 8 years |
17.72 | drakx-17.72.tar drakx-17.72.tar.gz drakx-17.72.tar.bz2 drakx-17.72.tar.xz drakx-17.72.zip | Thierry Vignaud | 8 years |
17.71 | drakx-17.71.tar drakx-17.71.tar.gz drakx-17.71.tar.bz2 drakx-17.71.tar.xz drakx-17.71.zip | Pascal Terjan | 8 years |
17.70 | drakx-17.70.tar drakx-17.70.tar.gz drakx-17.70.tar.bz2 drakx-17.70.tar.xz drakx-17.70.zip | Anne Nicolas | 8 years |
17.69 | drakx-17.69.tar drakx-17.69.tar.gz drakx-17.69.tar.bz2 drakx-17.69.tar.xz drakx-17.69.zip | Thierry Vignaud | 8 years |
17.68 | drakx-17.68.tar drakx-17.68.tar.gz drakx-17.68.tar.bz2 drakx-17.68.tar.xz drakx-17.68.zip | Thierry Vignaud | 8 years |
17.67 | drakx-17.67.tar drakx-17.67.tar.gz drakx-17.67.tar.bz2 drakx-17.67.tar.xz drakx-17.67.zip | Pascal Terjan | 8 years |
17.66 | drakx-17.66.tar drakx-17.66.tar.gz drakx-17.66.tar.bz2 drakx-17.66.tar.xz drakx-17.66.zip | Pascal Terjan | 8 years |
17.65 | drakx-17.65.tar drakx-17.65.tar.gz drakx-17.65.tar.bz2 drakx-17.65.tar.xz drakx-17.65.zip | Thierry Vignaud | 8 years |
17.64 | drakx-17.64.tar drakx-17.64.tar.gz drakx-17.64.tar.bz2 drakx-17.64.tar.xz drakx-17.64.zip | Anne Nicolas | 8 years |
17.63 | drakx-17.63.tar drakx-17.63.tar.gz drakx-17.63.tar.bz2 drakx-17.63.tar.xz drakx-17.63.zip | Anne Nicolas | 8 years |
17.62 | drakx-17.62.tar drakx-17.62.tar.gz drakx-17.62.tar.bz2 drakx-17.62.tar.xz drakx-17.62.zip | Anne Nicolas | 8 years |
17.61 | drakx-17.61.tar drakx-17.61.tar.gz drakx-17.61.tar.bz2 drakx-17.61.tar.xz drakx-17.61.zip | Thierry Vignaud | 8 years |
17.60 | drakx-17.60.tar drakx-17.60.tar.gz drakx-17.60.tar.bz2 drakx-17.60.tar.xz drakx-17.60.zip | Thierry Vignaud | 8 years |
17.59 | drakx-17.59.tar drakx-17.59.tar.gz drakx-17.59.tar.bz2 drakx-17.59.tar.xz drakx-17.59.zip | Thierry Vignaud | 8 years |
17.58 | drakx-17.58.tar drakx-17.58.tar.gz drakx-17.58.tar.bz2 drakx-17.58.tar.xz drakx-17.58.zip | Thierry Vignaud | 8 years |
17.57 | drakx-17.57.tar drakx-17.57.tar.gz drakx-17.57.tar.bz2 drakx-17.57.tar.xz drakx-17.57.zip | Thierry Vignaud | 8 years |
17.56 | drakx-17.56.tar drakx-17.56.tar.gz drakx-17.56.tar.bz2 drakx-17.56.tar.xz drakx-17.56.zip | Thierry Vignaud | 8 years |
17.54 | drakx-17.54.tar drakx-17.54.tar.gz drakx-17.54.tar.bz2 drakx-17.54.tar.xz drakx-17.54.zip | Thierry Vignaud | 8 years |
17.53 | drakx-17.53.tar drakx-17.53.tar.gz drakx-17.53.tar.bz2 drakx-17.53.tar.xz drakx-17.53.zip | Thierry Vignaud | 8 years |
17.52 | drakx-17.52.tar drakx-17.52.tar.gz drakx-17.52.tar.bz2 drakx-17.52.tar.xz drakx-17.52.zip | Thierry Vignaud | 8 years |
17.51 | drakx-17.51.tar drakx-17.51.tar.gz drakx-17.51.tar.bz2 drakx-17.51.tar.xz drakx-17.51.zip | Thierry Vignaud | 8 years |
17.50 | drakx-17.50.tar drakx-17.50.tar.gz drakx-17.50.tar.bz2 drakx-17.50.tar.xz drakx-17.50.zip | Thierry Vignaud | 8 years |
17.49 | drakx-17.49.tar drakx-17.49.tar.gz drakx-17.49.tar.bz2 drakx-17.49.tar.xz drakx-17.49.zip | Thierry Vignaud | 8 years |
17.48 | drakx-17.48.tar drakx-17.48.tar.gz drakx-17.48.tar.bz2 drakx-17.48.tar.xz drakx-17.48.zip | Thierry Vignaud | 8 years |
17.47 | drakx-17.47.tar drakx-17.47.tar.gz drakx-17.47.tar.bz2 drakx-17.47.tar.xz drakx-17.47.zip | Thierry Vignaud | 9 years |
17.46 | drakx-17.46.tar drakx-17.46.tar.gz drakx-17.46.tar.bz2 drakx-17.46.tar.xz drakx-17.46.zip | Thierry Vignaud | 9 years |
17.45 | drakx-17.45.tar drakx-17.45.tar.gz drakx-17.45.tar.bz2 drakx-17.45.tar.xz drakx-17.45.zip | Thierry Vignaud | 9 years |
17.44 | drakx-17.44.tar drakx-17.44.tar.gz drakx-17.44.tar.bz2 drakx-17.44.tar.xz drakx-17.44.zip | Thierry Vignaud | 9 years |
17.43 | drakx-17.43.tar drakx-17.43.tar.gz drakx-17.43.tar.bz2 drakx-17.43.tar.xz drakx-17.43.zip | Thierry Vignaud | 9 years |
17.42 | drakx-17.42.tar drakx-17.42.tar.gz drakx-17.42.tar.bz2 drakx-17.42.tar.xz drakx-17.42.zip | Thierry Vignaud | 9 years |
17.41 | drakx-17.41.tar drakx-17.41.tar.gz drakx-17.41.tar.bz2 drakx-17.41.tar.xz drakx-17.41.zip | Thierry Vignaud | 9 years |
17.40 | drakx-17.40.tar drakx-17.40.tar.gz drakx-17.40.tar.bz2 drakx-17.40.tar.xz drakx-17.40.zip | Thierry Vignaud | 9 years |
17.39 | drakx-17.39.tar drakx-17.39.tar.gz drakx-17.39.tar.bz2 drakx-17.39.tar.xz drakx-17.39.zip | Thierry Vignaud | 9 years |
17.38 | drakx-17.38.tar drakx-17.38.tar.gz drakx-17.38.tar.bz2 drakx-17.38.tar.xz drakx-17.38.zip | Thierry Vignaud | 9 years |
17.37 | drakx-17.37.tar drakx-17.37.tar.gz drakx-17.37.tar.bz2 drakx-17.37.tar.xz drakx-17.37.zip | Thierry Vignaud | 9 years |
17.36.1 | drakx-17.36.1.tar drakx-17.36.1.tar.gz drakx-17.36.1.tar.bz2 drakx-17.36.1.tar.xz drakx-17.36.1.zip | Thierry Vignaud | 9 years |
17.36 | drakx-17.36.tar drakx-17.36.tar.gz drakx-17.36.tar.bz2 drakx-17.36.tar.xz drakx-17.36.zip | Thierry Vignaud | 9 years |
17.35.1 | drakx-17.35.1.tar drakx-17.35.1.tar.gz drakx-17.35.1.tar.bz2 drakx-17.35.1.tar.xz drakx-17.35.1.zip | Thierry Vignaud | 9 years |
17.35 | drakx-17.35.tar drakx-17.35.tar.gz drakx-17.35.tar.bz2 drakx-17.35.tar.xz drakx-17.35.zip | Thierry Vignaud | 9 years |
17.34.1 | drakx-17.34.1.tar drakx-17.34.1.tar.gz drakx-17.34.1.tar.bz2 drakx-17.34.1.tar.xz drakx-17.34.1.zip | Thierry Vignaud | 9 years |
17.34 | drakx-17.34.tar drakx-17.34.tar.gz drakx-17.34.tar.bz2 drakx-17.34.tar.xz drakx-17.34.zip | Thierry Vignaud | 9 years |
17.33 | drakx-17.33.tar drakx-17.33.tar.gz drakx-17.33.tar.bz2 drakx-17.33.tar.xz drakx-17.33.zip | Thierry Vignaud | 9 years |
17.31 | drakx-17.31.tar drakx-17.31.tar.gz drakx-17.31.tar.bz2 drakx-17.31.tar.xz drakx-17.31.zip | Anne Nicolas | 9 years |
17.29 | drakx-17.29.tar drakx-17.29.tar.gz drakx-17.29.tar.bz2 drakx-17.29.tar.xz drakx-17.29.zip | Thierry Vignaud | 9 years |
17.28 | drakx-17.28.tar drakx-17.28.tar.gz drakx-17.28.tar.bz2 drakx-17.28.tar.xz drakx-17.28.zip | Thierry Vignaud | 9 years |
17.27 | drakx-17.27.tar drakx-17.27.tar.gz drakx-17.27.tar.bz2 drakx-17.27.tar.xz drakx-17.27.zip | Thierry Vignaud | 9 years |
17.26.1 | drakx-17.26.1.tar drakx-17.26.1.tar.gz drakx-17.26.1.tar.bz2 drakx-17.26.1.tar.xz drakx-17.26.1.zip | Thierry Vignaud | 9 years |
17.26 | drakx-17.26.tar drakx-17.26.tar.gz drakx-17.26.tar.bz2 drakx-17.26.tar.xz drakx-17.26.zip | Thierry Vignaud | 9 years |
17.25 | drakx-17.25.tar drakx-17.25.tar.gz drakx-17.25.tar.bz2 drakx-17.25.tar.xz drakx-17.25.zip | Thierry Vignaud | 9 years |
17.24 | drakx-17.24.tar drakx-17.24.tar.gz drakx-17.24.tar.bz2 drakx-17.24.tar.xz drakx-17.24.zip | Thierry Vignaud | 9 years |
17.23 | drakx-17.23.tar drakx-17.23.tar.gz drakx-17.23.tar.bz2 drakx-17.23.tar.xz drakx-17.23.zip | Thierry Vignaud | 9 years |
17.22 | drakx-17.22.tar drakx-17.22.tar.gz drakx-17.22.tar.bz2 drakx-17.22.tar.xz drakx-17.22.zip | Thierry Vignaud | 9 years |
17.21 | drakx-17.21.tar drakx-17.21.tar.gz drakx-17.21.tar.bz2 drakx-17.21.tar.xz drakx-17.21.zip | Thierry Vignaud | 9 years |
17.20 | drakx-17.20.tar drakx-17.20.tar.gz drakx-17.20.tar.bz2 drakx-17.20.tar.xz drakx-17.20.zip | Thierry Vignaud | 9 years |
17.19 | drakx-17.19.tar drakx-17.19.tar.gz drakx-17.19.tar.bz2 drakx-17.19.tar.xz drakx-17.19.zip | Thierry Vignaud | 9 years |
17.18.1 | drakx-17.18.1.tar drakx-17.18.1.tar.gz drakx-17.18.1.tar.bz2 drakx-17.18.1.tar.xz drakx-17.18.1.zip | Thierry Vignaud | 9 years |
17.18 | drakx-17.18.tar drakx-17.18.tar.gz drakx-17.18.tar.bz2 drakx-17.18.tar.xz drakx-17.18.zip | Thierry Vignaud | 9 years |
17.17 | drakx-17.17.tar drakx-17.17.tar.gz drakx-17.17.tar.bz2 drakx-17.17.tar.xz drakx-17.17.zip | Thierry Vignaud | 9 years |
17.16 | drakx-17.16.tar drakx-17.16.tar.gz drakx-17.16.tar.bz2 drakx-17.16.tar.xz drakx-17.16.zip | Thierry Vignaud | 9 years |
17.15 | drakx-17.15.tar drakx-17.15.tar.gz drakx-17.15.tar.bz2 drakx-17.15.tar.xz drakx-17.15.zip | Thierry Vignaud | 9 years |
17.14 | drakx-17.14.tar drakx-17.14.tar.gz drakx-17.14.tar.bz2 drakx-17.14.tar.xz drakx-17.14.zip | Thierry Vignaud | 9 years |
17.13 | drakx-17.13.tar drakx-17.13.tar.gz drakx-17.13.tar.bz2 drakx-17.13.tar.xz drakx-17.13.zip | Thierry Vignaud | 9 years |
17.12 | drakx-17.12.tar drakx-17.12.tar.gz drakx-17.12.tar.bz2 drakx-17.12.tar.xz drakx-17.12.zip | Thierry Vignaud | 9 years |
17.11 | drakx-17.11.tar drakx-17.11.tar.gz drakx-17.11.tar.bz2 drakx-17.11.tar.xz drakx-17.11.zip | Anne Nicolas | 9 years |
17.10 | drakx-17.10.tar drakx-17.10.tar.gz drakx-17.10.tar.bz2 drakx-17.10.tar.xz drakx-17.10.zip | Thierry Vignaud | 9 years |
17.9 | drakx-17.9.tar drakx-17.9.tar.gz drakx-17.9.tar.bz2 drakx-17.9.tar.xz drakx-17.9.zip | Thierry Vignaud | 9 years |
17.8 | drakx-17.8.tar drakx-17.8.tar.gz drakx-17.8.tar.bz2 drakx-17.8.tar.xz drakx-17.8.zip | Thierry Vignaud | 9 years |
17.7.1 | drakx-17.7.1.tar drakx-17.7.1.tar.gz drakx-17.7.1.tar.bz2 drakx-17.7.1.tar.xz drakx-17.7.1.zip | Thierry Vignaud | 9 years |
12.7 | drakx-12.7.tar drakx-12.7.tar.gz drakx-12.7.tar.bz2 drakx-12.7.tar.xz drakx-12.7.zip | Thierry Vignaud | 9 years |
17.7 | drakx-17.7.tar drakx-17.7.tar.gz drakx-17.7.tar.bz2 drakx-17.7.tar.xz drakx-17.7.zip | Thierry Vignaud | 9 years |
12.6 | drakx-12.6.tar drakx-12.6.tar.gz drakx-12.6.tar.bz2 drakx-12.6.tar.xz drakx-12.6.zip | Anne Nicolas | 9 years |
17.5 | drakx-17.5.tar drakx-17.5.tar.gz drakx-17.5.tar.bz2 drakx-17.5.tar.xz drakx-17.5.zip | Anne Nicolas | 9 years |
17.4 | drakx-17.4.tar drakx-17.4.tar.gz drakx-17.4.tar.bz2 drakx-17.4.tar.xz drakx-17.4.zip | Anne Nicolas | 9 years |
17.3 | drakx-17.3.tar drakx-17.3.tar.gz drakx-17.3.tar.bz2 drakx-17.3.tar.xz drakx-17.3.zip | Thierry Vignaud | 9 years |
17.2 | drakx-17.2.tar drakx-17.2.tar.gz drakx-17.2.tar.bz2 drakx-17.2.tar.xz drakx-17.2.zip | Anne Nicolas | 9 years |
17.1 | drakx-17.1.tar drakx-17.1.tar.gz drakx-17.1.tar.bz2 drakx-17.1.tar.xz drakx-17.1.zip | Thierry Vignaud | 9 years |
17.0 | drakx-17.0.tar drakx-17.0.tar.gz drakx-17.0.tar.bz2 drakx-17.0.tar.xz drakx-17.0.zip | Thierry Vignaud | 10 years |
16.105 | drakx-16.105.tar drakx-16.105.tar.gz drakx-16.105.tar.bz2 drakx-16.105.tar.xz drakx-16.105.zip | Thomas Backlund | 10 years |
16.104 | drakx-16.104.tar drakx-16.104.tar.gz drakx-16.104.tar.bz2 drakx-16.104.tar.xz drakx-16.104.zip | Thomas Backlund | 10 years |
16.103 | drakx-16.103.tar drakx-16.103.tar.gz drakx-16.103.tar.bz2 drakx-16.103.tar.xz drakx-16.103.zip | Thierry Vignaud | 10 years |
16.102 | drakx-16.102.tar drakx-16.102.tar.gz drakx-16.102.tar.bz2 drakx-16.102.tar.xz drakx-16.102.zip | Thomas Backlund | 10 years |
16.101 | drakx-16.101.tar drakx-16.101.tar.gz drakx-16.101.tar.bz2 drakx-16.101.tar.xz drakx-16.101.zip | Thierry Vignaud | 10 years |
16.100 | drakx-16.100.tar drakx-16.100.tar.gz drakx-16.100.tar.bz2 drakx-16.100.tar.xz drakx-16.100.zip | Thierry Vignaud | 10 years |
16.99 | drakx-16.99.tar drakx-16.99.tar.gz drakx-16.99.tar.bz2 drakx-16.99.tar.xz drakx-16.99.zip | Thierry Vignaud | 10 years |
16.98 | drakx-16.98.tar drakx-16.98.tar.gz drakx-16.98.tar.bz2 drakx-16.98.tar.xz drakx-16.98.zip | Thierry Vignaud | 10 years |
16.26.14 | drakx-16.26.14.tar drakx-16.26.14.tar.gz drakx-16.26.14.tar.bz2 drakx-16.26.14.tar.xz drakx-16.26.14.zip | Thierry Vignaud | 10 years |
16.97 | drakx-16.97.tar drakx-16.97.tar.gz drakx-16.97.tar.bz2 drakx-16.97.tar.xz drakx-16.97.zip | Thierry Vignaud | 10 years |
16.96 | drakx-16.96.tar drakx-16.96.tar.gz drakx-16.96.tar.bz2 drakx-16.96.tar.xz drakx-16.96.zip | Thierry Vignaud | 10 years |
16.95 | drakx-16.95.tar drakx-16.95.tar.gz drakx-16.95.tar.bz2 drakx-16.95.tar.xz drakx-16.95.zip | Thierry Vignaud | 10 years |
16.26.13 | drakx-16.26.13.tar drakx-16.26.13.tar.gz drakx-16.26.13.tar.bz2 drakx-16.26.13.tar.xz drakx-16.26.13.zip | Thierry Vignaud | 10 years |
16.94 | drakx-16.94.tar drakx-16.94.tar.gz drakx-16.94.tar.bz2 drakx-16.94.tar.xz drakx-16.94.zip | Thomas Backlund | 10 years |
16.93 | drakx-16.93.tar drakx-16.93.tar.gz drakx-16.93.tar.bz2 drakx-16.93.tar.xz drakx-16.93.zip | Thierry Vignaud | 10 years |
16.92 | drakx-16.92.tar drakx-16.92.tar.gz drakx-16.92.tar.bz2 drakx-16.92.tar.xz drakx-16.92.zip | Thierry Vignaud | 10 years |
16.91 | drakx-16.91.tar drakx-16.91.tar.gz drakx-16.91.tar.bz2 drakx-16.91.tar.xz drakx-16.91.zip | Anne Nicolas | 10 years |
16.90 | drakx-16.90.tar drakx-16.90.tar.gz drakx-16.90.tar.bz2 drakx-16.90.tar.xz drakx-16.90.zip | Thomas Backlund | 10 years |
16.89 | drakx-16.89.tar drakx-16.89.tar.gz drakx-16.89.tar.bz2 drakx-16.89.tar.xz drakx-16.89.zip | Pascal Terjan | 10 years |
16.88 | drakx-16.88.tar drakx-16.88.tar.gz drakx-16.88.tar.bz2 drakx-16.88.tar.xz drakx-16.88.zip | Rémi Verschelde | 10 years |
16.87 | drakx-16.87.tar drakx-16.87.tar.gz drakx-16.87.tar.bz2 drakx-16.87.tar.xz drakx-16.87.zip | Pascal Terjan | 10 years |
16.86 | drakx-16.86.tar drakx-16.86.tar.gz drakx-16.86.tar.bz2 drakx-16.86.tar.xz drakx-16.86.zip | Thomas Backlund | 10 years |
16.85 | drakx-16.85.tar drakx-16.85.tar.gz drakx-16.85.tar.bz2 drakx-16.85.tar.xz drakx-16.85.zip | Thierry Vignaud | 10 years |
16.84 | drakx-16.84.tar drakx-16.84.tar.gz drakx-16.84.tar.bz2 drakx-16.84.tar.xz drakx-16.84.zip | Thierry Vignaud | 10 years |
16.83 | drakx-16.83.tar drakx-16.83.tar.gz drakx-16.83.tar.bz2 drakx-16.83.tar.xz drakx-16.83.zip | Thomas Backlund | 10 years |
16.82 | drakx-16.82.tar drakx-16.82.tar.gz drakx-16.82.tar.bz2 drakx-16.82.tar.xz drakx-16.82.zip | Thierry Vignaud | 10 years |
16.81 | drakx-16.81.tar drakx-16.81.tar.gz drakx-16.81.tar.bz2 drakx-16.81.tar.xz drakx-16.81.zip | Thierry Vignaud | 10 years |
16.80 | drakx-16.80.tar drakx-16.80.tar.gz drakx-16.80.tar.bz2 drakx-16.80.tar.xz drakx-16.80.zip | Thierry Vignaud | 10 years |
16.79 | drakx-16.79.tar drakx-16.79.tar.gz drakx-16.79.tar.bz2 drakx-16.79.tar.xz drakx-16.79.zip | Thierry Vignaud | 10 years |
16.78 | drakx-16.78.tar drakx-16.78.tar.gz drakx-16.78.tar.bz2 drakx-16.78.tar.xz drakx-16.78.zip | Thierry Vignaud | 10 years |
16.77 | drakx-16.77.tar drakx-16.77.tar.gz drakx-16.77.tar.bz2 drakx-16.77.tar.xz drakx-16.77.zip | Thierry Vignaud | 10 years |
16.76 | drakx-16.76.tar drakx-16.76.tar.gz drakx-16.76.tar.bz2 drakx-16.76.tar.xz drakx-16.76.zip | Thierry Vignaud | 10 years |
16.75 | drakx-16.75.tar drakx-16.75.tar.gz drakx-16.75.tar.bz2 drakx-16.75.tar.xz drakx-16.75.zip | Thierry Vignaud | 10 years |
16.74 | drakx-16.74.tar drakx-16.74.tar.gz drakx-16.74.tar.bz2 drakx-16.74.tar.xz drakx-16.74.zip | Thierry Vignaud | 10 years |
16.73 | drakx-16.73.tar drakx-16.73.tar.gz drakx-16.73.tar.bz2 drakx-16.73.tar.xz drakx-16.73.zip | Thomas Backlund | 10 years |
16.72 | drakx-16.72.tar drakx-16.72.tar.gz drakx-16.72.tar.bz2 drakx-16.72.tar.xz drakx-16.72.zip | Anne Nicolas | 10 years |
16.71 | drakx-16.71.tar drakx-16.71.tar.gz drakx-16.71.tar.bz2 drakx-16.71.tar.xz drakx-16.71.zip | Thierry Vignaud | 10 years |
16.70 | drakx-16.70.tar drakx-16.70.tar.gz drakx-16.70.tar.bz2 drakx-16.70.tar.xz drakx-16.70.zip | Rémi Verschelde | 10 years |
16.69 | drakx-16.69.tar drakx-16.69.tar.gz drakx-16.69.tar.bz2 drakx-16.69.tar.xz drakx-16.69.zip | Thomas Backlund | 10 years |
16.68 | drakx-16.68.tar drakx-16.68.tar.gz drakx-16.68.tar.bz2 drakx-16.68.tar.xz drakx-16.68.zip | Thierry Vignaud | 10 years |
16.67 | drakx-16.67.tar drakx-16.67.tar.gz drakx-16.67.tar.bz2 drakx-16.67.tar.xz drakx-16.67.zip | Thierry Vignaud | 10 years |
16.66 | drakx-16.66.tar drakx-16.66.tar.gz drakx-16.66.tar.bz2 drakx-16.66.tar.xz drakx-16.66.zip | Rémi Verschelde | 10 years |
16.65 | drakx-16.65.tar drakx-16.65.tar.gz drakx-16.65.tar.bz2 drakx-16.65.tar.xz drakx-16.65.zip | Rémi Verschelde | 10 years |
16.64 | drakx-16.64.tar drakx-16.64.tar.gz drakx-16.64.tar.bz2 drakx-16.64.tar.xz drakx-16.64.zip | Thierry Vignaud | 10 years |
16.63 | drakx-16.63.tar drakx-16.63.tar.gz drakx-16.63.tar.bz2 drakx-16.63.tar.xz drakx-16.63.zip | Thierry Vignaud | 10 years |
16.62 | drakx-16.62.tar drakx-16.62.tar.gz drakx-16.62.tar.bz2 drakx-16.62.tar.xz drakx-16.62.zip | Thierry Vignaud | 10 years |
16.61 | drakx-16.61.tar drakx-16.61.tar.gz drakx-16.61.tar.bz2 drakx-16.61.tar.xz drakx-16.61.zip | Thierry Vignaud | 10 years |
16.60 | drakx-16.60.tar drakx-16.60.tar.gz drakx-16.60.tar.bz2 drakx-16.60.tar.xz drakx-16.60.zip | Thierry Vignaud | 10 years |
16.59 | drakx-16.59.tar drakx-16.59.tar.gz drakx-16.59.tar.bz2 drakx-16.59.tar.xz drakx-16.59.zip | Thierry Vignaud | 10 years |
16.58 | drakx-16.58.tar drakx-16.58.tar.gz drakx-16.58.tar.bz2 drakx-16.58.tar.xz drakx-16.58.zip | Thierry Vignaud | 10 years |
16.57 | drakx-16.57.tar drakx-16.57.tar.gz drakx-16.57.tar.bz2 drakx-16.57.tar.xz drakx-16.57.zip | Thierry Vignaud | 10 years |
16.56 | drakx-16.56.tar drakx-16.56.tar.gz drakx-16.56.tar.bz2 drakx-16.56.tar.xz drakx-16.56.zip | Thomas Backlund | 10 years |
16.55 | drakx-16.55.tar drakx-16.55.tar.gz drakx-16.55.tar.bz2 drakx-16.55.tar.xz drakx-16.55.zip | Anne Nicolas | 10 years |
16.54 | drakx-16.54.tar drakx-16.54.tar.gz drakx-16.54.tar.bz2 drakx-16.54.tar.xz drakx-16.54.zip | Anne Nicolas | 10 years |
16.53 | drakx-16.53.tar drakx-16.53.tar.gz drakx-16.53.tar.bz2 drakx-16.53.tar.xz drakx-16.53.zip | Luc Menut | 10 years |
16.52 | drakx-16.52.tar drakx-16.52.tar.gz drakx-16.52.tar.bz2 drakx-16.52.tar.xz drakx-16.52.zip | Thomas Backlund | 10 years |
16.51 | drakx-16.51.tar drakx-16.51.tar.gz drakx-16.51.tar.bz2 drakx-16.51.tar.xz drakx-16.51.zip | Anne Nicolas | 10 years |
16.50 | drakx-16.50.tar drakx-16.50.tar.gz drakx-16.50.tar.bz2 drakx-16.50.tar.xz drakx-16.50.zip | Thomas Backlund | 10 years |
16.49 | drakx-16.49.tar drakx-16.49.tar.gz drakx-16.49.tar.bz2 drakx-16.49.tar.xz drakx-16.49.zip | Marja van Waes | 10 years |
16.48 | drakx-16.48.tar drakx-16.48.tar.gz drakx-16.48.tar.bz2 drakx-16.48.tar.xz drakx-16.48.zip | Rémi Verschelde | 10 years |
16.47 | drakx-16.47.tar drakx-16.47.tar.gz drakx-16.47.tar.bz2 drakx-16.47.tar.xz drakx-16.47.zip | Thierry Vignaud | 10 years |
16.46 | drakx-16.46.tar drakx-16.46.tar.gz drakx-16.46.tar.bz2 drakx-16.46.tar.xz drakx-16.46.zip | Thierry Vignaud | 10 years |
16.45 | drakx-16.45.tar drakx-16.45.tar.gz drakx-16.45.tar.bz2 drakx-16.45.tar.xz drakx-16.45.zip | Thierry Vignaud | 10 years |
16.44 | drakx-16.44.tar drakx-16.44.tar.gz drakx-16.44.tar.bz2 drakx-16.44.tar.xz drakx-16.44.zip | Thierry Vignaud | 10 years |
16.43 | drakx-16.43.tar drakx-16.43.tar.gz drakx-16.43.tar.bz2 drakx-16.43.tar.xz drakx-16.43.zip | Pascal Terjan | 10 years |
16.41 | drakx-16.41.tar drakx-16.41.tar.gz drakx-16.41.tar.bz2 drakx-16.41.tar.xz drakx-16.41.zip | Thierry Vignaud | 10 years |
16.42 | drakx-16.42.tar drakx-16.42.tar.gz drakx-16.42.tar.bz2 drakx-16.42.tar.xz drakx-16.42.zip | Pascal Terjan | 10 years |
16.39 | drakx-16.39.tar drakx-16.39.tar.gz drakx-16.39.tar.bz2 drakx-16.39.tar.xz drakx-16.39.zip | Thierry Vignaud | 10 years |
16.40 | drakx-16.40.tar drakx-16.40.tar.gz drakx-16.40.tar.bz2 drakx-16.40.tar.xz drakx-16.40.zip | Thierry Vignaud | 10 years |
16.26.12 | drakx-16.26.12.tar drakx-16.26.12.tar.gz drakx-16.26.12.tar.bz2 drakx-16.26.12.tar.xz drakx-16.26.12.zip | Thierry Vignaud | 10 years |
16.38 | drakx-16.38.tar drakx-16.38.tar.gz drakx-16.38.tar.bz2 drakx-16.38.tar.xz drakx-16.38.zip | Anne Nicolas | 10 years |
16.37 | drakx-16.37.tar drakx-16.37.tar.gz drakx-16.37.tar.bz2 drakx-16.37.tar.xz drakx-16.37.zip | Colin Guthrie | 10 years |
16.36 | drakx-16.36.tar drakx-16.36.tar.gz drakx-16.36.tar.bz2 drakx-16.36.tar.xz drakx-16.36.zip | Thomas Backlund | 11 years |
16.35 | drakx-16.35.tar drakx-16.35.tar.gz drakx-16.35.tar.bz2 drakx-16.35.tar.xz drakx-16.35.zip | Anne Nicolas | 11 years |
16.26.11 | drakx-16.26.11.tar drakx-16.26.11.tar.gz drakx-16.26.11.tar.bz2 drakx-16.26.11.tar.xz drakx-16.26.11.zip | Thierry Vignaud | 11 years |
16.26.10 | drakx-16.26.10.tar drakx-16.26.10.tar.gz drakx-16.26.10.tar.bz2 drakx-16.26.10.tar.xz drakx-16.26.10.zip | Thierry Vignaud | 11 years |
16.34 | drakx-16.34.tar drakx-16.34.tar.gz drakx-16.34.tar.bz2 drakx-16.34.tar.xz drakx-16.34.zip | Thierry Vignaud | 11 years |
16.26.9 | drakx-16.26.9.tar drakx-16.26.9.tar.gz drakx-16.26.9.tar.bz2 drakx-16.26.9.tar.xz drakx-16.26.9.zip | Thierry Vignaud | 11 years |
16.33 | drakx-16.33.tar drakx-16.33.tar.gz drakx-16.33.tar.bz2 drakx-16.33.tar.xz drakx-16.33.zip | Thierry Vignaud | 11 years |
16.32 | drakx-16.32.tar drakx-16.32.tar.gz drakx-16.32.tar.bz2 drakx-16.32.tar.xz drakx-16.32.zip | Thierry Vignaud | 11 years |
16.31.1 | drakx-16.31.1.tar drakx-16.31.1.tar.gz drakx-16.31.1.tar.bz2 drakx-16.31.1.tar.xz drakx-16.31.1.zip | Thierry Vignaud | 11 years |
16.31 | drakx-16.31.tar drakx-16.31.tar.gz drakx-16.31.tar.bz2 drakx-16.31.tar.xz drakx-16.31.zip | Thierry Vignaud | 11 years |
16.30 | drakx-16.30.tar drakx-16.30.tar.gz drakx-16.30.tar.bz2 drakx-16.30.tar.xz drakx-16.30.zip | Thierry Vignaud | 11 years |
16.29 | drakx-16.29.tar drakx-16.29.tar.gz drakx-16.29.tar.bz2 drakx-16.29.tar.xz drakx-16.29.zip | Thomas Backlund | 11 years |
16.28 | drakx-16.28.tar drakx-16.28.tar.gz drakx-16.28.tar.bz2 drakx-16.28.tar.xz drakx-16.28.zip | Thierry Vignaud | 11 years |
16.27 | drakx-16.27.tar drakx-16.27.tar.gz drakx-16.27.tar.bz2 drakx-16.27.tar.xz drakx-16.27.zip | Thierry Vignaud | 11 years |
16.26.8 | drakx-16.26.8.tar drakx-16.26.8.tar.gz drakx-16.26.8.tar.bz2 drakx-16.26.8.tar.xz drakx-16.26.8.zip | Thierry Vignaud | 11 years |
16.26.7 | drakx-16.26.7.tar drakx-16.26.7.tar.gz drakx-16.26.7.tar.bz2 drakx-16.26.7.tar.xz drakx-16.26.7.zip | Colin Guthrie | 11 years |
16.26.6 | drakx-16.26.6.tar drakx-16.26.6.tar.gz drakx-16.26.6.tar.bz2 drakx-16.26.6.tar.xz drakx-16.26.6.zip | Thierry Vignaud | 11 years |
16.26.5 | drakx-16.26.5.tar drakx-16.26.5.tar.gz drakx-16.26.5.tar.bz2 drakx-16.26.5.tar.xz &n
# It may sound crazy to set %formhash for each bug as $::FORM{}
# will not change, but %formhash is modified below and we prefer
# to set it again.
my $i = 0;
my @oldvalues = SnapShotBug($id);
my %oldhash;
my %formhash;
foreach my $col (@::log_columns) {
# Consider NULL db entries to be equivalent to the empty string
$oldvalues[$i] = '' unless defined $oldvalues[$i];
$oldhash{$col} = $oldvalues[$i];
$formhash{$col} = $::FORM{$col} if defined $::FORM{$col};
$i++;
}
# If the user is reassigning bugs, we need to:
# - convert $newhash{'assigned_to'} and $newhash{'qa_contact'}
# email addresses into their corresponding IDs;
# - update $newhash{'bug_status'} to its real state if the bug
# is in the unconfirmed state.
$formhash{'qa_contact'} = $qacontact if Param('useqacontact');
if ($::FORM{'knob'} eq 'reassignbycomponent'
|| $::FORM{'knob'} eq 'reassign')
{
$formhash{'assigned_to'} = $assignee;
if ($oldhash{'bug_status'} eq 'UNCONFIRMED') {
$formhash{'bug_status'} = $oldhash{'bug_status'};
}
}
foreach my $col (@::log_columns) {
if (exists $formhash{$col}
&& !CheckCanChangeField($col, $id, $oldhash{$col}, $formhash{$col}))
{
my $vars;
if ($col eq 'component_id') {
# Display the component name
$vars->{'oldvalue'} = get_component_name($oldhash{$col});
$vars->{'newvalue'} = $::FORM{'component'};
$vars->{'field'} = 'component';
} elsif ($col eq 'assigned_to' || $col eq 'qa_contact') {
# Display the assignee or QA contact email address
$vars->{'oldvalue'} = DBID_to_name($oldhash{$col});
$vars->{'newvalue'} = DBID_to_name($formhash{$col});
$vars->{'field'} = $col;
} else {
$vars->{'oldvalue'} = $oldhash{$col};
$vars->{'newvalue'} = $formhash{$col};
$vars->{'field'} = $col;
}
$vars->{'privs'} = $PrivilegesRequired;
ThrowUserError("illegal_change", $vars);
}
}
# When editing multiple bugs, users can specify a list of keywords to delete
# from bugs. If the list matches the current set of keywords on those bugs,
# CheckCanChangeField above will fail to check permissions because it thinks
# the list hasn't changed. To fix that, we have to call CheckCanChangeField
# again with old!=new if the keyword action is "delete" and old=new.
if ($keywordaction eq "delete"
&& exists $::FORM{keywords}
&& length(@keywordlist) > 0
&& $::FORM{keywords} eq $oldhash{keywords}
&& !CheckCanChangeField("keywords", $id, "old is not", "equal to new"))
{
$vars->{'oldvalue'} = $oldhash{keywords};
$vars->{'newvalue'} = "no keywords";
$vars->{'field'} = "keywords";
$vars->{'privs'} = $PrivilegesRequired;
ThrowUserError("illegal_change", $vars);
}
$oldhash{'product'} = get_product_name($oldhash{'product_id'});
if (!CanEditProductId($oldhash{'product_id'})) {
ThrowUserError("product_edit_denied",
{ product => $oldhash{'product'} });
}
if (defined $::FORM{'product'}
&& $::FORM{'product'} ne $::FORM{'dontchange'}
&& $::FORM{'product'} ne $oldhash{'product'}
&& !CanEnterProduct($::FORM{'product'})) {
ThrowUserError("entry_access_denied",
{ product => $::FORM{'product'} });
}
if ($requiremilestone) {
# musthavemilestoneonaccept applies only if at least two
# target milestones are defined for the current product.
my $nb_milestones = scalar(@{$::target_milestone{$oldhash{'product'}}});
if ($nb_milestones > 1) {
my $value = $cgi->param('target_milestone');
if (!defined $value || $value eq $cgi->param('dontchange')) {
$value = $oldhash{'target_milestone'};
}
my $defaultmilestone =
$dbh->selectrow_array("SELECT defaultmilestone
FROM products WHERE id = ?",
undef, $oldhash{'product_id'});
# if musthavemilestoneonaccept == 1, then the target
# milestone must be different from the default one.
if ($value eq $defaultmilestone) {
ThrowUserError("milestone_required", { bug_id => $id });
}
}
}
if (defined $::FORM{'delta_ts'} && $::FORM{'delta_ts'} ne $delta_ts) {
($vars->{'operations'}) = GetBugActivity($::FORM{'id'}, $::FORM{'delta_ts'});
$vars->{'start_at'} = $::FORM{'longdesclength'};
$vars->{'comments'} = Bugzilla::Bug::GetComments($id);
$::FORM{'delta_ts'} = $delta_ts;
$vars->{'form'} = \%::FORM;
$vars->{'mform'} = \%::MFORM;
$vars->{'bug_id'} = $id;
$dbh->bz_unlock_tables(UNLOCK_ABORT);
# Warn the user about the mid-air collision and ask them what to do.
$template->process("bug/process/midair.html.tmpl", $vars)
|| ThrowTemplateError($template->error());
exit;
}
my %deps;
if (defined $::FORM{'dependson'}) {
my $me = "blocked";
my $target = "dependson";
my %deptree;
for (1..2) {
$deptree{$target} = [];
my %seen;
foreach my $i (split('[\s,]+', $::FORM{$target})) {
next if $i eq "";
if ($id eq $i) {
ThrowUserError("dependency_loop_single");
}
if (!exists $seen{$i}) {
push(@{$deptree{$target}}, $i);
$seen{$i} = 1;
}
}
# populate $deps{$target} as first-level deps only.
# and find remainder of dependency tree in $deptree{$target}
@{$deps{$target}} = @{$deptree{$target}};
my @stack = @{$deps{$target}};
while (@stack) {
my $i = shift @stack;
SendSQL("select $target from dependencies where $me = " .
SqlQuote($i));
while (MoreSQLData()) {
my $t = FetchOneColumn();
# ignore any _current_ dependencies involving this bug,
# as they will be overwritten with data from the form.
if ($t != $id && !exists $seen{$t}) {
push(@{$deptree{$target}}, $t);
push @stack, $t;
$seen{$t} = 1;
}
}
}
if ($me eq 'dependson') {
my @deps = @{$deptree{'dependson'}};
my @blocks = @{$deptree{'blocked'}};
my @union = ();
my @isect = ();
my %union = ();
my %isect = ();
foreach my $b (@deps, @blocks) { $union{$b}++ && $isect{$b}++ }
@union = keys %union;
@isect = keys %isect;
if (@isect > 0) {
my $both;
foreach my $i (@isect) {
$both = $both . GetBugLink($i, "#" . $i) . " ";
}
ThrowUserError("dependency_loop_multi",
{ both => $both });
}
}
my $tmp = $me;
$me = $target;
$target = $tmp;
}
}
#
# Start updating the relevant database entries
#
SendSQL("select now()");
$timestamp = FetchOneColumn();
my $sql_timestamp = SqlQuote($timestamp);
my $work_time;
if (UserInGroup(Param('timetrackinggroup'))) {
$work_time = $::FORM{'work_time'};
if ($work_time) {
# AppendComment (called below) can in theory raise an error,
# but because we've already validated work_time here it's
# safe to log the entry before adding the comment.
LogActivityEntry($id, "work_time", "", $::FORM{'work_time'},
$whoid, $timestamp);
}
}
if ($::FORM{'comment'} || $work_time) {
AppendComment($id, Bugzilla->user->login, $::FORM{'comment'},
$::FORM{'commentprivacy'}, $timestamp, $work_time);
$bug_changed = 1;
}
if (@::legal_keywords && exists $::FORM{keywords}) {
# There are three kinds of "keywordsaction": makeexact, add, delete.
# For makeexact, we delete everything, and then add our things.
# For add, we delete things we're adding (to make sure we don't
# end up having them twice), and then we add them.
# For delete, we just delete things on the list.
my $changed = 0;
if ($keywordaction eq "makeexact") {
SendSQL("DELETE FROM keywords WHERE bug_id = $id");
$changed = 1;
}
foreach my $keyword (@keywordlist) {
if ($keywordaction ne "makeexact") {
SendSQL("DELETE FROM keywords
WHERE bug_id = $id AND keywordid = $keyword");
$changed = 1;
}
if ($keywordaction ne "delete") {
SendSQL("INSERT INTO keywords
(bug_id, keywordid) VALUES ($id, $keyword)");
$changed = 1;
}
}
if ($changed) {
SendSQL("SELECT keyworddefs.name
FROM keyworddefs, keywords
WHERE keywords.bug_id = $id
AND keyworddefs.id = keywords.keywordid
ORDER BY keyworddefs.name");
my @list;
while (MoreSQLData()) {
push(@list, FetchOneColumn());
}
SendSQL("UPDATE bugs SET delta_ts = $sql_timestamp, keywords = " .
SqlQuote(join(', ', @list)) .
" WHERE bug_id = $id");
}
}
my $query = "$basequery\nwhere bug_id = $id";
if ($::comma ne "") {
SendSQL($query);
}
# Check for duplicates if the bug is [re]open
SendSQL("SELECT resolution FROM bugs WHERE bug_id = $id");
my $resolution = FetchOneColumn();
if ($resolution eq '') {
SendSQL("DELETE FROM duplicates WHERE dupe = $id");
}
my $newproduct_id = $oldhash{'product_id'};
if ((defined $::FORM{'product'})
&& ($::FORM{'product'} ne $::FORM{'dontchange'})) {
my $newproduct_id = get_product_id($::FORM{'product'});
}
my %groupsrequired = ();
my %groupsforbidden = ();
SendSQL("SELECT id, membercontrol
FROM groups LEFT JOIN group_control_map
ON id = group_id
AND product_id = $newproduct_id WHERE isactive != 0");
while (MoreSQLData()) {
my ($group, $control) = FetchSQLData();
$control ||= 0;
unless ($control > &::CONTROLMAPNA) {
$groupsforbidden{$group} = 1;
}
if ($control == &::CONTROLMAPMANDATORY) {
$groupsrequired{$group} = 1;
}
}
my @groupAddNames = ();
my @groupAddNamesAll = ();
foreach my $grouptoadd (@groupAdd, keys %groupsrequired) {
next if $groupsforbidden{$grouptoadd};
push(@groupAddNamesAll, GroupIdToName($grouptoadd));
if (!BugInGroupId($id, $grouptoadd)) {
push(@groupAddNames, GroupIdToName($grouptoadd));
SendSQL("INSERT INTO bug_group_map (bug_id, group_id)
VALUES ($id, $grouptoadd)");
}
}
my @groupDelNames = ();
my @groupDelNamesAll = ();
foreach my $grouptodel (@groupDel, keys %groupsforbidden) {
push(@groupDelNamesAll, GroupIdToName($grouptodel));
next if $groupsrequired{$grouptodel};
if (BugInGroupId($id, $grouptodel)) {
push(@groupDelNames, GroupIdToName($grouptodel));
}
SendSQL("DELETE FROM bug_group_map
WHERE bug_id = $id AND group_id = $grouptodel");
}
my $groupDelNames = join(',', @groupDelNames);
my $groupAddNames = join(',', @groupAddNames);
if ($groupDelNames ne $groupAddNames) {
LogActivityEntry($id, "bug_group", $groupDelNames, $groupAddNames,
$whoid, $timestamp);
$bug_changed = 1;
}
my @ccRemoved = ();
if (defined $::FORM{newcc} || defined $::FORM{'addselfcc'} || defined $::FORM{removecc} || defined $::FORM{masscc}) {
# Get the current CC list for this bug
my %oncc;
SendSQL("SELECT who FROM cc WHERE bug_id = $id");
while (MoreSQLData()) {
$oncc{FetchOneColumn()} = 1;
}
my (@added, @removed) = ();
foreach my $pid (keys %cc_add) {
# If this person isn't already on the cc list, add them
if (! $oncc{$pid}) {
SendSQL("INSERT INTO cc (bug_id, who) VALUES ($id, $pid)");
push (@added, $cc_add{$pid});
$oncc{$pid} = 1;
}
}
foreach my $pid (keys %cc_remove) {
# If the person is on the cc list, remove them
if ($oncc{$pid}) {
SendSQL("DELETE FROM cc WHERE bug_id = $id AND who = $pid");
push (@removed, $cc_remove{$pid});
$oncc{$pid} = 0;
}
}
# If any changes were found, record it in the activity log
if (scalar(@removed) || scalar(@added)) {
my $removed = join(", ", @removed);
my $added = join(", ", @added);
LogActivityEntry($id,"cc",$removed,$added,$whoid,$timestamp);
$bug_changed = 1;
}
@ccRemoved = @removed;
}
# We need to send mail for dependson/blocked bugs if the dependencies
# change or the status or resolution change. This var keeps track of that.
my $check_dep_bugs = 0;
if (defined $::FORM{'dependson'}) {
my $me = "blocked";
my $target = "dependson";
for (1..2) {
SendSQL("select $target from dependencies where $me = $id order by $target");
my %snapshot;
my @oldlist;
while (MoreSQLData()) {
push(@oldlist, FetchOneColumn());
}
my @newlist = sort {$a <=> $b} @{$deps{$target}};
@dependencychanged{@oldlist} = 1;
@dependencychanged{@newlist} = 1;
while (0 < @oldlist || 0 < @newlist) {
if (@oldlist == 0 || (@newlist > 0 &&
$oldlist[0] > $newlist[0])) {
$snapshot{$newlist[0]} = SnapShotDeps($newlist[0], $me,
$target);
shift @newlist;
} elsif (@newlist == 0 || (@oldlist > 0 &&
$newlist[0] > $oldlist[0])) {
$snapshot{$oldlist[0]} = SnapShotDeps($oldlist[0], $me,
$target);
shift @oldlist;
} else {
if ($oldlist[0] != $newlist[0]) {
$dbh->bz_unlock_tables(UNLOCK_ABORT);
die "Error in list comparing code";
}
shift @oldlist;
shift @newlist;
}
}
my @keys = keys(%snapshot);
if (@keys) {
my $oldsnap = SnapShotDeps($id, $target, $me);
SendSQL("delete from dependencies where $me = $id");
foreach my $i (@{$deps{$target}}) {
SendSQL("insert into dependencies ($me, $target) values ($id, $i)");
}
foreach my $k (@keys) {
LogDependencyActivity($k, $snapshot{$k}, $me, $target, $timestamp);
}
LogDependencyActivity($id, $oldsnap, $target, $me, $timestamp);
$check_dep_bugs = 1;
}
my $tmp = $me;
$me = $target;
$target = $tmp;
}
}
# When a bug changes products and the old or new product is associated
# with a bug group, it may be necessary to remove the bug from the old
# group or add it to the new one. There are a very specific series of
# conditions under which these activities take place, more information
# about which can be found in comments within the conditionals below.
# Check if the user has changed the product to which the bug belongs;
if (
defined $::FORM{'product'}
&& $::FORM{'product'} ne $::FORM{'dontchange'}
&& $::FORM{'product'} ne $oldhash{'product'}
) {
my $newproduct_id = get_product_id($::FORM{'product'});
# Depending on the "addtonewgroup" variable, groups with
# defaults will change.
#
# For each group, determine
# - The group id and if it is active
# - The control map value for the old product and this group
# - The control map value for the new product and this group
# - Is the user in this group?
# - Is the bug in this group?
SendSQL("SELECT DISTINCT groups.id, isactive, " .
"oldcontrolmap.membercontrol, newcontrolmap.membercontrol, " .
"user_group_map.user_id IS NOT NULL, " .
"bug_group_map.group_id IS NOT NULL " .
"FROM groups " .
"LEFT JOIN group_control_map AS oldcontrolmap " .
"ON oldcontrolmap.group_id = groups.id " .
"AND oldcontrolmap.product_id = " . $oldhash{'product_id'} .
" LEFT JOIN group_control_map AS newcontrolmap " .
"ON newcontrolmap.group_id = groups.id " .
"AND newcontrolmap.product_id = $newproduct_id " .
"LEFT JOIN user_group_map " .
"ON user_group_map.group_id = groups.id " .
"AND user_group_map.user_id = $whoid " .
"AND user_group_map.isbless = 0 " .
"LEFT JOIN bug_group_map " .
"ON bug_group_map.group_id = groups.id " .
"AND bug_group_map.bug_id = $id "
);
my @groupstoremove = ();
my @groupstoadd = ();
my @defaultstoremove = ();
my @defaultstoadd = ();
my @allgroups = ();
my $buginanydefault = 0;
my $buginanychangingdefault = 0;
while (MoreSQLData()) {
my ($groupid, $isactive, $oldcontrol, $newcontrol,
$useringroup, $bugingroup) = FetchSQLData();
# An undefined newcontrol is none.
$newcontrol = CONTROLMAPNA unless $newcontrol;
$oldcontrol = CONTROLMAPNA unless $oldcontrol;
push(@allgroups, $groupid);
if (($bugingroup) && ($isactive)
&& ($oldcontrol == CONTROLMAPDEFAULT)) {
# Bug was in a default group.
$buginanydefault = 1;
if (($newcontrol != CONTROLMAPDEFAULT)
&& ($newcontrol != CONTROLMAPMANDATORY)) {
# Bug was in a default group that no longer is.
$buginanychangingdefault = 1;
push (@defaultstoremove, $groupid);
}
}
if (($isactive) && (!$bugingroup)
&& ($newcontrol == CONTROLMAPDEFAULT)
&& ($useringroup)) {
push (@defaultstoadd, $groupid);
}
if (($bugingroup) && ($isactive) && ($newcontrol == CONTROLMAPNA)) {
# Group is no longer permitted.
push(@groupstoremove, $groupid);
}
if ((!$bugingroup) && ($isactive)
&& ($newcontrol == CONTROLMAPMANDATORY)) {
# Group is now required.
push(@groupstoadd, $groupid);
}
}
# If addtonewgroups = "yes", old default groups will be removed
# and new default groups will be added.
# If addtonewgroups = "yesifinold", old default groups will be removed
# and new default groups will be added only if the bug was in ANY
# of the old default groups.
# If addtonewgroups = "no", old default groups will be removed and not
# replaced.
push(@groupstoremove, @defaultstoremove);
if (AnyDefaultGroups()
&& (($::FORM{'addtonewgroup'} eq 'yes')
|| (($::FORM{'addtonewgroup'} eq 'yesifinold')
&& ($buginanydefault)))) {
push(@groupstoadd, @defaultstoadd);
}
# Now actually update the bug_group_map.
my @DefGroupsAdded = ();
my @DefGroupsRemoved = ();
foreach my $groupid (@allgroups) {
my $thisadd = grep( ($_ == $groupid), @groupstoadd);
my $thisdel = grep( ($_ == $groupid), @groupstoremove);
if ($thisadd) {
push(@DefGroupsAdded, GroupIdToName($groupid));
SendSQL("INSERT INTO bug_group_map (bug_id, group_id) VALUES " .
"($id, $groupid)");
} elsif ($thisdel) {
push(@DefGroupsRemoved, GroupIdToName($groupid));
SendSQL("DELETE FROM bug_group_map WHERE bug_id = $id " .
"AND group_id = $groupid");
}
}
if ((@DefGroupsAdded) || (@DefGroupsRemoved)) {
LogActivityEntry($id, "bug_group",
join(', ', @DefGroupsRemoved),
join(', ', @DefGroupsAdded),
$whoid, $timestamp);
}
}
# get a snapshot of the newly set values out of the database,
# and then generate any necessary bug activity entries by seeing
# what has changed since before we wrote out the new values.
#
my @newvalues = SnapShotBug($id);
my %newhash;
$i = 0;
foreach my $col (@::log_columns) {
# Consider NULL db entries to be equivalent to the empty string
$newvalues[$i] ||= '';
$newhash{$col} = $newvalues[$i];
$i++;
}
# for passing to Bugzilla::BugMail to ensure that when someone is removed
# from one of these fields, they get notified of that fact (if desired)
#
my $origOwner = "";
my $origQaContact = "";
foreach my $c (@::log_columns) {
my $col = $c; # We modify it, don't want to modify array
# values in place.
my $old = shift @oldvalues;
my $new = shift @newvalues;
if ($old ne $new) {
# Products and components are now stored in the DB using ID's
# We need to translate this to English before logging it
if ($col eq 'product_id') {
$old = get_product_name($old);
$new = get_product_name($new);
$col = 'product';
}
if ($col eq 'component_id') {
$old = get_component_name($old);
$new = get_component_name($new);
$col = 'component';
}
# save off the old value for passing to Bugzilla::BugMail so
# the old owner can be notified
#
if ($col eq 'assigned_to') {
$old = ($old) ? DBID_to_name($old) : "";
$new = ($new) ? DBID_to_name($new) : "";
$origOwner = $old;
}
# ditto for the old qa contact
#
if ($col eq 'qa_contact') {
$old = ($old) ? DBID_to_name($old) : "";
$new = ($new) ? DBID_to_name($new) : "";
$origQaContact = $old;
}
# If this is the keyword field, only record the changes, not everything.
if ($col eq 'keywords') {
($old, $new) = diff_strings($old, $new);
}
if ($col eq 'product') {
RemoveVotes($id, 0,
"This bug has been moved to a different product");
}
if ($col eq 'bug_status'
&& IsOpenedState($old) ne IsOpenedState($new))
{
$check_dep_bugs = 1;
}
# Convert deadlines to the YYYY-MM-DD format. We use an
# intermediate $xxxtime to prevent errors in the web
# server log file when str2time($xxx) is undefined.
if ($col eq 'deadline') {
my $oldtime = str2time($old);
$old = ($oldtime) ? time2str("%Y-%m-%d", $oldtime) : '';
my $newtime = str2time($new);
$new = ($newtime) ? time2str("%Y-%m-%d", $newtime) : '';
}
LogActivityEntry($id,$col,$old,$new,$whoid,$timestamp);
$bug_changed = 1;
}
}
# Set and update flags.
if ($UserInEditGroupSet) {
my $target = Bugzilla::Flag::GetTarget($id);
Bugzilla::Flag::process($target, $timestamp, \%::FORM);
}
if ($bug_changed) {
SendSQL("UPDATE bugs SET delta_ts = $sql_timestamp WHERE bug_id = $id");
}
$dbh->bz_unlock_tables();
$vars->{'mailrecipients'} = { 'cc' => \@ccRemoved,
'owner' => $origOwner,
'qa' => $origQaContact,
'changer' => Bugzilla->user->login };
$vars->{'id'} = $id;
# Let the user know the bug was changed and who did and didn't
# receive email about the change.
$template->process("bug/process/results.html.tmpl", $vars)
|| ThrowTemplateError($template->error());
$vars->{'header_done'} = 1;
if ($duplicate) {
# Check to see if Reporter of this bug is reporter of Dupe
SendSQL("SELECT reporter FROM bugs WHERE bug_id = " . SqlQuote($::FORM{'id'}));
my $reporter = FetchOneColumn();
SendSQL("SELECT reporter FROM bugs WHERE bug_id = " . SqlQuote($duplicate) . " and reporter = $reporter");
my $isreporter = FetchOneColumn();
SendSQL("SELECT who FROM cc WHERE bug_id = " . SqlQuote($duplicate) . " and who = $reporter");
my $isoncc = FetchOneColumn();
unless ($isreporter || $isoncc || ! $::FORM{'confirm_add_duplicate'}) {
# The reporter is oblivious to the existence of the new bug and is permitted access
# ... add 'em to the cc (and record activity)
LogActivityEntry($duplicate,"cc","",DBID_to_name($reporter),
$whoid,$timestamp);
SendSQL("INSERT INTO cc (who, bug_id) VALUES ($reporter, " . SqlQuote($duplicate) . ")");
}
# Bug 171639 - Duplicate notifications do not need to be private.
AppendComment($duplicate, Bugzilla->user->login,
"*** Bug $::FORM{'id'} has been marked as a duplicate of this bug. ***",
0, $timestamp);
CheckFormFieldDefined(\%::FORM,'comment');
SendSQL("INSERT INTO duplicates VALUES ($duplicate, $::FORM{'id'})");
$vars->{'mailrecipients'} = { 'changer' => Bugzilla->user->login };
$vars->{'id'} = $duplicate;
$vars->{'type'} = "dupe";
# Let the user know a duplication notation was added to the original bug.
$template->process("bug/process/results.html.tmpl", $vars)
|| ThrowTemplateError($template->error());
$vars->{'header_done'} = 1;
}
if ($check_dep_bugs) {
foreach my $k (keys(%dependencychanged)) {
$vars->{'mailrecipients'} = { 'changer' => Bugzilla->user->login };
$vars->{'id'} = $k;
$vars->{'type'} = "dep";
# Let the user know we checked to see if we should email notice
# of this change to users with a relationship to the dependent
# bug and who did and didn't receive email about it.
$template->process("bug/process/results.html.tmpl", $vars)
|| ThrowTemplateError($template->error());
$vars->{'header_done'} = 1;
}
}
}
# now show the next bug
if ($next_bug) {
if (detaint_natural($next_bug) && Bugzilla->user->can_see_bug($next_bug)) {
my $bug = new Bugzilla::Bug($next_bug, $whoid);
ThrowCodeError("bug_error", { bug => $bug }) if $bug->error;
# next.html.tmpl includes edit.html.tmpl, and therefore we
# need $bug defined in $vars.
$vars->{'bug'} = $bug;
# And we need to determine if Patch Viewer is installed, for
# Diff link (NB: Duplicate code with show_bug.cgi.)
eval {
require PatchReader;
$vars->{'patchviewerinstalled'} = 1;
};
$template->process("bug/process/next.html.tmpl", $vars)
|| ThrowTemplateError($template->error());
exit;
}
}
# End the response page.
$template->process("bug/navigate.html.tmpl", $vars)
|| ThrowTemplateError($template->error());
$template->process("global/footer.html.tmpl", $vars)
|| ThrowTemplateError($template->error());
|