diff options
48 files changed, 2174 insertions, 11683 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..a5862628 --- /dev/null +++ b/.gitignore @@ -0,0 +1,11 @@ +*.pyc +*.swp +*.swo +*~ +#*# +local_settings.py +archweb.db +archweb.db-* +testing/ +repos/ +lib/ @@ -58,6 +58,7 @@ packages, you will probably want the following: (archweb-env) $ ./manage.py loaddata main/fixtures/arches.json (archweb-env) $ ./manage.py loaddata main/fixtures/repos.json + (archweb-env) $ ./manage.py loaddata main/fixtures/groups.json (archweb-env) $ ./manage.py loaddata mirrors/fixtures/mirrorprotocols.json 7. Use the following commands to start a service instance diff --git a/devel/management/commands/reporead.py b/devel/management/commands/reporead.py index e31478c5..09e48559 100644 --- a/devel/management/commands/reporead.py +++ b/devel/management/commands/reporead.py @@ -27,9 +27,17 @@ import logging from datetime import datetime from optparse import make_option +# New in 2.6, but fast (C implementation) in 2.7. We will use it over codecs if +# available. Eventually remove the codecs import completely. +io = None +try: + import io +except ImportError: + pass + from logging import ERROR, WARNING, INFO, DEBUG -from main.models import Arch, Package, Repo +from main.models import Arch, Package, PackageDepend, PackageFile, Repo logging.basicConfig( level=WARNING, @@ -79,14 +87,13 @@ class Pkg(object): """An interim 'container' object for holding Arch package data.""" bare = ( 'name', 'base', 'arch', 'desc', 'filename', 'md5sum', 'url', 'builddate', 'packager' ) - squash = ( 'license', ) number = ( 'csize', 'isize' ) def __init__(self, repo): self.repo = repo self.ver = None self.rel = None - for k in self.bare + self.squash + self.number: + for k in self.bare + self.number: setattr(self, k, None) def populate(self, values): @@ -94,8 +101,6 @@ class Pkg(object): # ensure we stay under our DB character limit if k in self.bare: setattr(self, k, v[0][:254]) - elif k in self.squash: - setattr(self, k, u', '.join(v)[:254]) elif k in self.number: setattr(self, k, long(v[0])) elif k == 'force': @@ -158,6 +163,20 @@ def find_user(userstring): # lookup more than strictly necessary. find_user.cache = {} +def create_depend(package, dep_str, optional=False): + depend = PackageDepend(pkg=package, optional=optional) + # lop off any description first + parts = dep_str.split(':', 1) + if len(parts) > 1: + depend.description = parts[1].strip() + match = re.match(r"^(.+?)((>=|<=|=|>|<)(.*))?$", parts[0].strip()) + if match: + depend.depname = match.group(1) + if match.group(2): + depend.depvcmp = match.group(2) + depend.save(force_insert=True) + return depend + def populate_pkg(dbpkg, repopkg, force=False, timestamp=None): if repopkg.base: dbpkg.pkgbase = repopkg.base @@ -166,7 +185,6 @@ def populate_pkg(dbpkg, repopkg, force=False, timestamp=None): dbpkg.pkgver = repopkg.ver dbpkg.pkgrel = repopkg.rel dbpkg.pkgdesc = repopkg.desc - dbpkg.license = repopkg.license dbpkg.url = repopkg.url dbpkg.filename = repopkg.filename dbpkg.compressed_size = repopkg.csize @@ -192,21 +210,22 @@ def populate_pkg(dbpkg, repopkg, force=False, timestamp=None): populate_files(dbpkg, repopkg, force=force) dbpkg.packagedepend_set.all().delete() - if 'depends' in repopkg.__dict__: + if hasattr(repopkg, 'depends'): for y in repopkg.depends: - # make sure we aren't adding self depends.. - # yes *sigh* i have seen them in pkgbuilds - dpname, dpvcmp = re.match(r"([a-z0-9._+-]+)(.*)", y).groups() - if dpname == repopkg.name: - logger.warning('Package %s has a depend on itself', repopkg.name) - continue - dbpkg.packagedepend_set.create(depname=dpname, depvcmp=dpvcmp) - logger.debug('Added %s as dep for pkg %s', dpname, repopkg.name) + dep = create_depend(dbpkg, y) + if hasattr(repopkg, 'optdepends'): + for y in repopkg.optdepends: + dep = create_depend(dbpkg, y, True) - dbpkg.packagegroup_set.all().delete() - if 'groups' in repopkg.__dict__: + dbpkg.groups.all().delete() + if hasattr(repopkg, 'groups'): for y in repopkg.groups: - dbpkg.packagegroup_set.create(name=y) + dbpkg.groups.create(name=y) + + dbpkg.licenses.all().delete() + if hasattr(repopkg, 'license'): + for y in repopkg.license: + dbpkg.licenses.create(name=y) def populate_files(dbpkg, repopkg, force=False): @@ -222,12 +241,21 @@ def populate_files(dbpkg, repopkg, force=False): elif dbpkg.files_last_update > dbpkg.last_update: return # only delete files if we are reading a DB that contains them - if 'files' in repopkg.__dict__: + if hasattr(repopkg, 'files'): dbpkg.packagefile_set.all().delete() logger.info("adding %d files for package %s", len(repopkg.files), dbpkg.pkgname) - for x in repopkg.files: - dbpkg.packagefile_set.create(path=x) + for f in repopkg.files: + dirname, filename = f.rsplit('/', 1) + if filename == '': + filename = None + # this is basically like calling dbpkg.packagefile_set.create(), + # but much faster as we can skip a lot of the repeated code paths + pkgfile = PackageFile(pkg=dbpkg, + is_directory=(filename is None), + directory=dirname + '/', + filename=filename) + pkgfile.save() dbpkg.files_last_update = datetime.now() dbpkg.save() @@ -363,21 +391,21 @@ def parse_repo(repopath): logger.error("File does not have the proper extension") raise Exception("File does not have the proper extension") - repodb = tarfile.open(repopath,"r") - ## assuming well formed tar, with dir first then files after - ## repo-add enforces this + repodb = tarfile.open(repopath, "r") logger.debug("Starting package parsing") dbfiles = ('desc', 'depends', 'files') pkgs = {} for tarinfo in repodb.getmembers(): - if tarinfo.isdir(): - continue - elif tarinfo.isreg(): + if tarinfo.isreg(): pkgid, fname = os.path.split(tarinfo.name) if fname not in dbfiles: continue data_file = repodb.extractfile(tarinfo) - data_file = codecs.EncodedFile(data_file, 'utf-8') + if io is None: + data_file = codecs.EncodedFile(data_file, 'utf-8') + else: + data_file = io.TextIOWrapper(io.BytesIO(data_file.read()), + encoding='utf=8') try: data = parse_info(data_file) p = pkgs.setdefault(pkgid, Pkg(reponame)) diff --git a/devel/tests.py b/devel/tests.py index 682f3d92..da5459d6 100644 --- a/devel/tests.py +++ b/devel/tests.py @@ -10,13 +10,6 @@ class DevelTest(TestCase): self.assertEqual(response['location'], 'http://testserver/login/?next=/devel/') - def test_notify(self): - response = self.client.get('/devel/notify/') - self.assertEqual(response.status_code, 302) - self.assertEqual(response.has_header('Location'), True) - self.assertEqual(response['location'], - 'http://testserver/login/?next=/devel/notify/') - def test_profile(self): response = self.client.get('/devel/profile/') self.assertEqual(response.status_code, 302) diff --git a/devel/urls.py b/devel/urls.py index 0a050a92..bcf9c071 100644 --- a/devel/urls.py +++ b/devel/urls.py @@ -3,7 +3,6 @@ from django.conf.urls.defaults import patterns urlpatterns = patterns('devel.views', (r'^$', 'index'), (r'^clock/$', 'clock'), - (r'^notify/$', 'change_notify'), (r'^profile/$', 'change_profile'), (r'^newuser/$', 'new_user_form'), ) diff --git a/devel/views.py b/devel/views.py index b26c7af0..311922ca 100644 --- a/devel/views.py +++ b/devel/views.py @@ -4,6 +4,7 @@ from django.contrib.auth.decorators import login_required, permission_required from django.contrib.auth.models import User from django.contrib.sites.models import Site from django.core.mail import send_mail +from django.template import loader, Context from django.views.decorators.cache import never_cache from django.views.generic.simple import direct_to_template @@ -23,8 +24,8 @@ from string import ascii_letters, digits def index(request): '''the Developer dashboard''' inner_q = PackageRelation.objects.filter(user=request.user).values('pkgbase') - flagged = Package.objects.select_related('arch', 'repo').filter(flag_date__isnull=False) - flagged = flagged.filter(pkgbase__in=inner_q).order_by('pkgname') + flagged = Package.objects.select_related('arch', 'repo').filter( + flag_date__isnull=False, pkgbase__in=inner_q).order_by('pkgname') todopkgs = TodolistPkg.objects.select_related( 'pkg', 'pkg__arch', 'pkg__repo').filter(complete=False) @@ -65,15 +66,6 @@ def clock(request): return direct_to_template(request, 'devel/clock.html', page_dict) -@login_required -def change_notify(request): - maint = User.objects.get(username=request.user.username) - notify = request.POST.get('notify', 'no') - prof = maint.get_profile() - prof.notify = (notify == 'yes') - prof.save() - return HttpResponseRedirect('/devel/') - class ProfileForm(forms.Form): email = forms.EmailField(label='Private email (not shown publicly):', help_text="Used for out-of-date notifications, etc.") @@ -120,25 +112,34 @@ class NewUserForm(forms.ModelForm): first_name = forms.CharField(required=False) last_name = forms.CharField(required=False) + def clean_username(self): + username = self.cleaned_data['username'] + if User.objects.filter(username=username).exists(): + raise forms.ValidationError( + "A user with that username already exists.") + return username + def save(self): profile = forms.ModelForm.save(self, False) pwletters = ascii_letters + digits - pw = ''.join([random.choice(pwletters) for i in xrange(8)]) + password = ''.join([random.choice(pwletters) for i in xrange(8)]) user = User.objects.create_user(username=self.cleaned_data['username'], - email=self.cleaned_data['email'], password=pw) + email=self.cleaned_data['email'], password=password) user.first_name = self.cleaned_data['first_name'] user.last_name = self.cleaned_data['last_name'] user.save() profile.user = user profile.save() - domain = Site.objects.get_current().domain + + t = loader.get_template('devel/new_account.txt') + c = Context({ + 'site': Site.objects.get_current(), + 'user': user, + 'password': password, + }) send_mail("Your new archweb account", - """You can now log into: -https://%s/login/ -with these login details: -Username: %s -Password: %s""" % (domain, user.username, pw), + t.render(c), 'Arch Website Notification <nobody@archlinux.org>', [user.email], fail_silently=False) @@ -62,7 +62,8 @@ class PackageFeed(Feed): def get_object(self, request, arch='', repo=''): obj = dict() - qs = Package.objects.select_related('arch', 'repo').order_by('-last_update') + qs = Package.objects.select_related('arch', 'repo').order_by( + '-last_update') if arch != '': # feed for a single arch, also include 'any' packages everywhere @@ -142,11 +143,11 @@ class NewsFeed(Feed): return wrapper(super(NewsFeed, self).__call__)(request, *args, **kwargs) def items(self): - return News.objects.select_related('author').order_by('-postdate', '-id')[:10] + return News.objects.select_related('author').order_by( + '-postdate', '-id')[:10] def item_pubdate(self, item): - d = item.postdate - return datetime.datetime(d.year, d.month, d.day) + return item.postdate def item_author_name(self, item): return item.author.get_full_name() diff --git a/main/fixtures/groups.json b/main/fixtures/groups.json new file mode 100644 index 00000000..32416a7a --- /dev/null +++ b/main/fixtures/groups.json @@ -0,0 +1,198 @@ +[ + { + "pk": 1, + "model": "auth.group", + "fields": { + "name": "Developers", + "permissions": [ + [ + "change_package", + "main", + "package" + ], + [ + "add_signoff", + "main", + "signoff" + ], + [ + "add_todolist", + "main", + "todolist" + ], + [ + "change_todolist", + "main", + "todolist" + ], + [ + "add_todolistpkg", + "main", + "todolistpkg" + ], + [ + "change_todolistpkg", + "main", + "todolistpkg" + ], + [ + "delete_todolistpkg", + "main", + "todolistpkg" + ], + [ + "add_news", + "news", + "news" + ], + [ + "change_news", + "news", + "news" + ] + ] + } + }, + { + "pk": 3, + "model": "auth.group", + "fields": { + "name": "Mirror Maintainers", + "permissions": [ + [ + "add_mirror", + "mirrors", + "mirror" + ], + [ + "change_mirror", + "mirrors", + "mirror" + ], + [ + "delete_mirror", + "mirrors", + "mirror" + ], + [ + "add_mirrorprotocol", + "mirrors", + "mirrorprotocol" + ], + [ + "change_mirrorprotocol", + "mirrors", + "mirrorprotocol" + ], + [ + "delete_mirrorprotocol", + "mirrors", + "mirrorprotocol" + ], + [ + "add_mirrorrsync", + "mirrors", + "mirrorrsync" + ], + [ + "change_mirrorrsync", + "mirrors", + "mirrorrsync" + ], + [ + "delete_mirrorrsync", + "mirrors", + "mirrorrsync" + ], + [ + "add_mirrorurl", + "mirrors", + "mirrorurl" + ], + [ + "change_mirrorurl", + "mirrors", + "mirrorurl" + ], + [ + "delete_mirrorurl", + "mirrors", + "mirrorurl" + ] + ] + } + }, + { + "pk": 2, + "model": "auth.group", + "fields": { + "name": "Trusted Users", + "permissions": [ + [ + "change_package", + "main", + "package" + ], + [ + "add_signoff", + "main", + "signoff" + ], + [ + "add_todolist", + "main", + "todolist" + ], + [ + "change_todolist", + "main", + "todolist" + ], + [ + "add_todolistpkg", + "main", + "todolistpkg" + ], + [ + "change_todolistpkg", + "main", + "todolistpkg" + ], + [ + "delete_todolistpkg", + "main", + "todolistpkg" + ] + ] + } + }, + { + "pk": 4, + "model": "auth.group", + "fields": { + "name": "User Admins", + "permissions": [ + [ + "add_user", + "auth", + "user" + ], + [ + "change_user", + "auth", + "user" + ], + [ + "add_userprofile", + "main", + "userprofile" + ], + [ + "change_userprofile", + "main", + "userprofile" + ] + ] + } + } +]
\ No newline at end of file diff --git a/main/fixtures/repos.json b/main/fixtures/repos.json index a89af7b5..3b79d964 100644 --- a/main/fixtures/repos.json +++ b/main/fixtures/repos.json @@ -50,6 +50,16 @@ } }, { + "pk": 8, + "model": "main.repo", + "fields": { + "svn_root": "community", + "testing": true, + "name": "Multilib-Testing", + "bugs_project": 5 + } + }, + { "pk": 3, "model": "main.repo", "fields": { diff --git a/main/fixtures/test_packages.json b/main/fixtures/test_packages.json deleted file mode 100644 index bc3be6d1..00000000 --- a/main/fixtures/test_packages.json +++ /dev/null @@ -1,11118 +0,0 @@ -[ - { - "pk": "1", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Utilities to download and work with the Arch Build System (ABS)", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "3", - "pkgname": "abs", - "arch": 2, - "pkgver": "2.0" - } - }, - { - "pk": "2", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Library for filesystem ACL support", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "1", - "pkgname": "acl", - "arch": 2, - "pkgver": "2.2.47" - } - }, - { - "pk": "3", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Drivers for atl2 ethernet card", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "1", - "pkgname": "atl2", - "arch": 2, - "pkgver": "2.0.4" - } - }, - { - "pk": "4", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Extended attribute support library for ACL support", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "1", - "pkgname": "attr", - "arch": 2, - "pkgver": "2.4.41" - } - }, - { - "pk": "5", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A GNU tool for automatically configuring source code", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "3", - "pkgname": "autoconf", - "arch": 2, - "pkgver": "2.61" - } - }, - { - "pk": "6", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A GNU tool for automatically creating Makefiles", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "2", - "pkgname": "automake", - "arch": 2, - "pkgver": "1.10.1" - } - }, - { - "pk": "7", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "The GNU Bourne Again shell", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "2", - "pkgname": "bash", - "arch": 2, - "pkgver": "3.2.033" - } - }, - { - "pk": "8", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "firmware extractor for the bcm43xx kernel module", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "2", - "pkgname": "bcm43xx-fwcutter", - "arch": 2, - "pkgver": "006" - } - }, - { - "pk": "9", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A complete 8086 assembler and loader", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "3", - "pkgname": "bin86", - "arch": 2, - "pkgver": "0.16.17" - } - }, - { - "pk": "10", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A set of programs to assemble and manipulate binary and object files", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "6", - "pkgname": "binutils", - "arch": 2, - "pkgver": "2.18" - } - }, - { - "pk": "11", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "The GNU general-purpose parser generator", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "4", - "pkgname": "bison", - "arch": 2, - "pkgver": "2.3" - } - }, - { - "pk": "12", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Layer2 ethernet bridging for Linux", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "2", - "pkgname": "bridge-utils", - "arch": 2, - "pkgver": "1.2" - } - }, - { - "pk": "13", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A high-quality data compression program", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "3", - "pkgname": "bzip2", - "arch": 2, - "pkgver": "1.0.4" - } - }, - { - "pk": "14", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "capi utils for isdn cards", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "6", - "pkgname": "capi4k-utils", - "arch": 2, - "pkgver": "050718" - } - }, - { - "pk": "15", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "The basic file, shell and text manipulation utilities of the GNU operating system", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "2", - "pkgname": "coreutils", - "arch": 2, - "pkgver": "6.10" - } - }, - { - "pk": "16", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A tool to copy files into or out of a cpio or tar archive", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "3", - "pkgname": "cpio", - "arch": 2, - "pkgver": "2.9" - } - }, - { - "pk": "17", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Password Checking Library", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "5", - "pkgname": "cracklib", - "arch": 2, - "pkgver": "2.8.10" - } - }, - { - "pk": "18", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Userspace setup tool for transparent encryption of block devices using the Linux 2.6 cryptoapi", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "1", - "pkgname": "cryptsetup", - "arch": 2, - "pkgver": "1.0.6" - } - }, - { - "pk": "19", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "csup - cvsup rewritten in C", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "5", - "pkgname": "csup", - "arch": 2, - "pkgver": "20060318" - } - }, - { - "pk": "20", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A POSIX compliant shell that aims to be as small as possible", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "4", - "pkgname": "dash", - "arch": 2, - "pkgver": "0.5.4" - } - }, - { - "pk": "21", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "The Berkeley DB embedded database system", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "2", - "pkgname": "db", - "arch": 2, - "pkgver": "4.6.21" - } - }, - { - "pk": "22", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Dillon's Cron Daemon", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "3", - "pkgname": "dcron", - "arch": 2, - "pkgver": "3.2" - } - }, - { - "pk": "23", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Device mapper userspace library and tools.", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "1", - "pkgname": "device-mapper", - "arch": 2, - "pkgver": "1.02.24" - } - }, - { - "pk": "24", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A DHCP client daemon", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "1", - "pkgname": "dhcpcd", - "arch": 2, - "pkgver": "3.2.1" - } - }, - { - "pk": "25", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A tool to display dialog boxes from shell scripts", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "1", - "pkgname": "dialog", - "arch": 2, - "pkgver": "1.1_20071028" - } - }, - { - "pk": "26", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Utility programs used for creating patch files", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "5", - "pkgname": "diffutils", - "arch": 2, - "pkgver": "2.8.1" - } - }, - { - "pk": "27", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Data migration API", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "3", - "pkgname": "dmapi", - "arch": 2, - "pkgver": "2.2.8" - } - }, - { - "pk": "28", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Device mapper RAID interface", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "4", - "pkgname": "dmraid", - "arch": 2, - "pkgver": "1.0.0.rc14" - } - }, - { - "pk": "29", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Various DNS utilities - dig host nslookup nsupdate", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "1", - "pkgname": "dnsutils", - "arch": 2, - "pkgver": "9.4.2" - } - }, - { - "pk": "30", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "DOS filesystem utilities", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "2", - "pkgname": "dosfstools", - "arch": 2, - "pkgver": "2.11" - } - }, - { - "pk": "31", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Ext2 filesystem utilities", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "1", - "pkgname": "e2fsprogs", - "arch": 2, - "pkgver": "1.40.8" - } - }, - { - "pk": "32", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A POSIX-compliant line editor", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "1", - "pkgname": "ed", - "arch": 2, - "pkgver": "0.9" - } - }, - { - "pk": "33", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A new API to format and send structured log messages", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "2", - "pkgname": "eventlog", - "arch": 2, - "pkgver": "0.2.5" - } - }, - { - "pk": "34", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Gives a fake root environment, useful for building packages as a non-privileged user", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "1", - "pkgname": "fakeroot", - "arch": 2, - "pkgver": "1.9.3" - } - }, - { - "pk": "35", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "File type identification utility", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "1", - "pkgname": "file", - "arch": 2, - "pkgver": "4.23" - } - }, - { - "pk": "36", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Base filesystem", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "2", - "pkgname": "filesystem", - "arch": 2, - "pkgver": "2008.03" - } - }, - { - "pk": "37", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "GNU utilities to locate files", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "1", - "pkgname": "findutils", - "arch": 2, - "pkgver": "4.2.33" - } - }, - { - "pk": "38", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A tool for generating text-scanning programs", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "4", - "pkgname": "flex", - "arch": 2, - "pkgver": "2.5.33" - } - }, - { - "pk": "39", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A library that makes it possible to implement a filesystem in a userspace program.", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "1", - "pkgname": "fuse", - "arch": 2, - "pkgver": "2.7.3" - } - }, - { - "pk": "40", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Gnu version of awk", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "2", - "pkgname": "gawk", - "arch": 2, - "pkgver": "3.1.6" - } - }, - { - "pk": "41", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "The GNU Compiler Collection", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "1", - "pkgname": "gcc", - "arch": 2, - "pkgver": "4.3.0" - } - }, - { - "pk": "42", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Runtime libraries shipped by GCC for C and C++ languages", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "1", - "pkgname": "gcc-libs", - "arch": 2, - "pkgver": "4.3.0" - } - }, - { - "pk": "43", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "GNU database library", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "5", - "pkgname": "gdbm", - "arch": 2, - "pkgver": "1.8.3" - } - }, - { - "pk": "44", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Program to compress initramfs images", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "3", - "pkgname": "gen-init-cpio", - "arch": 2, - "pkgver": "2.6.17" - } - }, - { - "pk": "45", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "GNU internationalization library", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "1", - "pkgname": "gettext", - "arch": 2, - "pkgver": "0.17" - } - }, - { - "pk": "46", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Common C routines used by GTK+ 2.4 and other libs", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "1", - "pkgname": "glib2", - "arch": 2, - "pkgver": "2.16.2" - } - }, - { - "pk": "47", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "GNU C Library", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "9", - "pkgname": "glibc", - "arch": 2, - "pkgver": "2.7" - } - }, - { - "pk": "48", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A free library for arbitrary precision arithmetic", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "2", - "pkgname": "gmp", - "arch": 2, - "pkgver": "4.2.2" - } - }, - { - "pk": "49", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A mouse server for the console and xterm", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "7", - "pkgname": "gpm", - "arch": 2, - "pkgver": "1.20.1" - } - }, - { - "pk": "50", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A string search utility", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "3", - "pkgname": "grep", - "arch": 2, - "pkgver": "2.5.3" - } - }, - { - "pk": "51", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "GNU troff text-formatting system", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "4", - "pkgname": "groff", - "arch": 2, - "pkgver": "1.19.2" - } - }, - { - "pk": "52", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A GNU multiboot boot loader", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "12", - "pkgname": "grub", - "arch": 2, - "pkgver": "0.97" - } - }, - { - "pk": "53", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "GNU compression utility", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "4", - "pkgname": "gzip", - "arch": 2, - "pkgver": "1.3.12" - } - }, - { - "pk": "54", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A shell utility for manipulating Linux IDE drive\/driver parameters", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "1", - "pkgname": "hdparm", - "arch": 2, - "pkgver": "8.6" - } - }, - { - "pk": "55", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Heimdal Kerberos V5 libraries", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "2", - "pkgname": "heimdal", - "arch": 2, - "pkgver": "1.0.1" - } - }, - { - "pk": "56", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Hardware detection script with loading modules and mkinitcpio.conf \/ rc.conf support", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "1", - "pkgname": "hwdetect", - "arch": 2, - "pkgver": "0.9" - } - }, - { - "pk": "57", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Utility for bonding ethernet interfaces", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "3", - "pkgname": "ifenslave", - "arch": 2, - "pkgver": "1.1.0" - } - }, - { - "pk": "58", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "System initialization\/bootup scripts", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "4", - "pkgname": "initscripts", - "arch": 2, - "pkgver": "2008.03" - } - }, - { - "pk": "59", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "IP Routing Utilities", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "1", - "pkgname": "iproute", - "arch": 2, - "pkgver": "2.6.24_rc7" - } - }, - { - "pk": "60", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A Linux kernel packet control tool", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "2", - "pkgname": "iptables", - "arch": 2, - "pkgver": "1.4.0" - } - }, - { - "pk": "61", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "IP Configuration Utilities (and Ping)", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "4", - "pkgname": "iputils", - "arch": 2, - "pkgver": "20070202" - } - }, - { - "pk": "62", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Intel Centrino Drivers firmware for IPW2100", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "2", - "pkgname": "ipw2100-fw", - "arch": 2, - "pkgver": "1.3" - } - }, - { - "pk": "63", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Intel Centrino Drivers firmware for IPW2200", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "2", - "pkgname": "ipw2200-fw", - "arch": 2, - "pkgver": "3.0" - } - }, - { - "pk": "64", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Driver for the Intel PRO\/Wireless 3945ABG miniPCI express adapter", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "8", - "pkgname": "ipw3945", - "arch": 2, - "pkgver": "1.2.2" - } - }, - { - "pk": "65", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Intel Centrino Drivers firmware for IPW3945", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "2", - "pkgname": "ipw3945-ucode", - "arch": 2, - "pkgver": "1.14.2" - } - }, - { - "pk": "66", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Regulatory daemon for IPW3945", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "4", - "pkgname": "ipw3945d", - "arch": 2, - "pkgver": "1.7.22" - } - }, - { - "pk": "67", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "User space administration programs and tools for ISDN", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "3", - "pkgname": "isdn4k-utils", - "arch": 2, - "pkgver": "3.2p1" - } - }, - { - "pk": "68", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Intel wireless firmware for IPW3945 (iwlwifi driver)", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "2", - "pkgname": "iwlwifi-3945-ucode", - "arch": 2, - "pkgver": "2.14.1.5" - } - }, - { - "pk": "69", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Intel wireless firmware for IPW4965 (iwlwifi driver)", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "1", - "pkgname": "iwlwifi-4965-ucode", - "arch": 2, - "pkgver": "4.44.1.20" - } - }, - { - "pk": "70", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "JFS filesystem utilities", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "2", - "pkgname": "jfsutils", - "arch": 2, - "pkgver": "1.1.12" - } - }, - { - "pk": "71", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Keytable files and keyboard utilities", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "2", - "pkgname": "kbd", - "arch": 2, - "pkgver": "1.14.1.20080309" - } - }, - { - "pk": "72", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Kernel headers sanitized for use in userspace", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "1", - "pkgname": "kernel-headers", - "arch": 2, - "pkgver": "2.6.24.3" - } - }, - { - "pk": "73", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "The Linux Kernel and modules", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "1", - "pkgname": "kernel26", - "arch": 2, - "pkgver": "2.6.24.4" - } - }, - { - "pk": "74", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "a minimal libc made for early-userspace", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "5", - "pkgname": "klibc", - "arch": 2, - "pkgver": "1.5" - } - }, - { - "pk": "75", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Extra apps for klibc early-userspace", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "1", - "pkgname": "klibc-extras", - "arch": 2, - "pkgver": "2.4" - } - }, - { - "pk": "76", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Keytable files and keyboard utilities", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "5", - "pkgname": "klibc-kbd", - "arch": 2, - "pkgver": "1.15.20080312" - } - }, - { - "pk": "77", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Utilities for inserting and removing modules from the Linux kernel", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "3", - "pkgname": "klibc-module-init-tools", - "arch": 2, - "pkgver": "3.2.2" - } - }, - { - "pk": "78", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "udevd compiled under klibc", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "3", - "pkgname": "klibc-udev", - "arch": 2, - "pkgver": "116" - } - }, - { - "pk": "79", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A terminal based program for viewing text files", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "1", - "pkgname": "less", - "arch": 2, - "pkgver": "418" - } - }, - { - "pk": "80", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "library that can create and read several streaming archive formats", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "1", - "pkgname": "libarchive", - "arch": 2, - "pkgver": "2.4.17" - } - }, - { - "pk": "81", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "URL based download library, forked from libfetch", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "1", - "pkgname": "libdownload", - "arch": 2, - "pkgver": "1.3" - } - }, - { - "pk": "82", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "libelf is a free ELF object file access library", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "3", - "pkgname": "libelf", - "arch": 2, - "pkgver": "0.8.10" - } - }, - { - "pk": "83", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "a mechanism to execute a callback function when a specific event occurs on a file descriptor or after a timeout has been reached", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "1", - "pkgname": "libevent", - "arch": 2, - "pkgver": "1.3e" - } - }, - { - "pk": "84", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "a general purpose crypto library based on the code used", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "1.1", - "pkgname": "libgcrypt", - "arch": 2, - "pkgver": "1.4.0" - } - }, - { - "pk": "85", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Support library for libgcrypt", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "1", - "pkgname": "libgpg-error", - "arch": 2, - "pkgver": "1.6" - } - }, - { - "pk": "86", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "LDAP client libraries", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "2", - "pkgname": "libldap", - "arch": 2, - "pkgver": "2.3.39" - } - }, - { - "pk": "87", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A system-independent interface for user-level packet capture", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "2", - "pkgname": "libpcap", - "arch": 2, - "pkgver": "0.9.8" - } - }, - { - "pk": "88", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Cyrus Simple Authentication Service Layer (SASL) library", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "5", - "pkgname": "libsasl", - "arch": 2, - "pkgver": "2.1.22" - } - }, - { - "pk": "89", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A generic library support script", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "2", - "pkgname": "libtool", - "arch": 2, - "pkgver": "2.2" - } - }, - { - "pk": "90", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Library to enable user space application programs to communicate with USB devices", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "3", - "pkgname": "libusb", - "arch": 2, - "pkgver": "0.1.12" - } - }, - { - "pk": "91", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "The standard licenses distribution package", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "1", - "pkgname": "licenses", - "arch": 2, - "pkgver": "2.3" - } - }, - { - "pk": "92", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A bootloader for Linux", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "2", - "pkgname": "lilo", - "arch": 2, - "pkgver": "22.8" - } - }, - { - "pk": "93", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A text WWW browser, similar to Lynx", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "1", - "pkgname": "links", - "arch": 2, - "pkgver": "2.1pre33" - } - }, - { - "pk": "94", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Drivers and tools to support ATM networking under Linux.", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "3", - "pkgname": "linux-atm", - "arch": 2, - "pkgver": "2.4.1" - } - }, - { - "pk": "95", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Rotates system logs automatically", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "1", - "pkgname": "logrotate", - "arch": 2, - "pkgver": "3.7.5" - } - }, - { - "pk": "96", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Logical Volume Manager 2 utilities", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "1", - "pkgname": "lvm2", - "arch": 2, - "pkgver": "2.02.33" - } - }, - { - "pk": "97", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "a portable lossless data compression library written in ANSI C", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "3", - "pkgname": "lzo2", - "arch": 2, - "pkgver": "2.02" - } - }, - { - "pk": "98", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "m4 macro processor", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "3", - "pkgname": "m4", - "arch": 2, - "pkgver": "1.4.10" - } - }, - { - "pk": "99", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Madwifi drivers for Atheros wireless chipsets. For stock arch 2.6 kernel", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "3", - "pkgname": "madwifi", - "arch": 2, - "pkgver": "0.9.4.3382" - } - }, - { - "pk": "100", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Userspace tools of madwifi drivers for Atheros wireless chipsets.", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "1", - "pkgname": "madwifi-utils", - "arch": 2, - "pkgver": "0.9.4.3382" - } - }, - { - "pk": "101", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A commandline utility for sending email", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "5", - "pkgname": "mailx", - "arch": 2, - "pkgver": "8.1.1" - } - }, - { - "pk": "102", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "GNU make utility to maintain groups of programs", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "3", - "pkgname": "make", - "arch": 2, - "pkgver": "3.81" - } - }, - { - "pk": "103", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A utility for reading man pages", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "2", - "pkgname": "man", - "arch": 2, - "pkgver": "1.6f" - } - }, - { - "pk": "104", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Linux man pages", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "1", - "pkgname": "man-pages", - "arch": 2, - "pkgver": "2.79" - } - }, - { - "pk": "105", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A tool for managing\/monitoring Linux md device arrays, also known as Software RAID", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "1", - "pkgname": "mdadm", - "arch": 2, - "pkgver": "2.6.4" - } - }, - { - "pk": "106", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Advanced, modular initramfs image creation utility", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "1", - "pkgname": "mkinitcpio", - "arch": 2, - "pkgver": "0.5.18.1" - } - }, - { - "pk": "107", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Faster merging drop-in for slocate", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "2", - "pkgname": "mlocate", - "arch": 2, - "pkgver": "0.18" - } - }, - { - "pk": "108", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Utilities for inserting and removing modules from the Linux kernel", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "6", - "pkgname": "module-init-tools", - "arch": 2, - "pkgver": "3.2.2" - } - }, - { - "pk": "109", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "multiple-precision floating-point library", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "1", - "pkgname": "mpfr", - "arch": 2, - "pkgver": "2.3.1" - } - }, - { - "pk": "110", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Pico editor clone with enhancements", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "1", - "pkgname": "nano", - "arch": 2, - "pkgver": "2.0.7" - } - }, - { - "pk": "111", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A System V Release 4.0 curses emulation library", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "6", - "pkgname": "ncurses", - "arch": 2, - "pkgver": "5.6" - } - }, - { - "pk": "112", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Module for NDIS (Windows Network Drivers) drivers supplied by vendors. For stock arch 2.6 kernel.", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "2", - "pkgname": "ndiswrapper", - "arch": 2, - "pkgver": "1.52" - } - }, - { - "pk": "113", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Binaries for ndiswrapper module", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "1", - "pkgname": "ndiswrapper-utils", - "arch": 2, - "pkgver": "1.52" - } - }, - { - "pk": "114", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Configuration tools for Linux networking", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "13", - "pkgname": "net-tools", - "arch": 2, - "pkgver": "1.60" - } - }, - { - "pk": "115", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Network configuration and profile scripts", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "1", - "pkgname": "netcfg", - "arch": 2, - "pkgver": "2.0.6" - } - }, - { - "pk": "116", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A telnet client (and server)", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "7", - "pkgname": "netkit-telnet", - "arch": 2, - "pkgver": "0.17" - } - }, - { - "pk": "117", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Support programs for Network File Systems", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "4", - "pkgname": "nfs-utils", - "arch": 2, - "pkgver": "1.1.0" - } - }, - { - "pk": "118", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Library to help mapping IDs, mainly for NFSv4", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "2", - "pkgname": "nfsidmap", - "arch": 2, - "pkgver": "0.20" - } - }, - { - "pk": "119", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Third generation Linux NTFS driver", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "1", - "pkgname": "ntfs-3g", - "arch": 2, - "pkgver": "1.2310" - } - }, - { - "pk": "120", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "NTFS Resizing Tool", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "2", - "pkgname": "ntfsprogs", - "arch": 2, - "pkgver": "2.0.0" - } - }, - { - "pk": "121", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A Secure SHell server\/client", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "6", - "pkgname": "openssh", - "arch": 2, - "pkgver": "4.7p1" - } - }, - { - "pk": "122", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "The Open Source toolkit for Secure Sockets Layer and Transport Layer Security", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "2", - "pkgname": "openssl", - "arch": 2, - "pkgver": "0.9.8g" - } - }, - { - "pk": "123", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Open Source implementation of IPsec for the Linux operating system", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "1", - "pkgname": "openswan", - "arch": 2, - "pkgver": "2.4.11" - } - }, - { - "pk": "124", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "An easy-to-use, robust, and highly configurable VPN (Virtual Private Network)", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "3", - "pkgname": "openvpn", - "arch": 2, - "pkgver": "2.0.9" - } - }, - { - "pk": "125", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A library-based package manager with dependency support", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "1", - "pkgname": "pacman", - "arch": 2, - "pkgver": "3.1.4" - } - }, - { - "pk": "126", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "PAM (Pluggable Authentication Modules) library", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "2", - "pkgname": "pam", - "arch": 2, - "pkgver": "0.99.9.0" - } - }, - { - "pk": "127", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A utility to apply patch files to original sources", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "4", - "pkgname": "patch", - "arch": 2, - "pkgver": "2.5.4" - } - }, - { - "pk": "128", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "PCI bus configuration space access library and tools", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "3", - "pkgname": "pciutils", - "arch": 2, - "pkgver": "2.2.8" - } - }, - { - "pk": "129", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Utilities for inserting and removing PCMCIA cards", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "4", - "pkgname": "pcmciautils", - "arch": 2, - "pkgver": "014" - } - }, - { - "pk": "130", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A library that implements Perl 5-style regular expressions", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "3", - "pkgname": "pcre", - "arch": 2, - "pkgver": "7.6" - } - }, - { - "pk": "131", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Practical Extraction and Report Language", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "3", - "pkgname": "perl", - "arch": 2, - "pkgver": "5.10.0" - } - }, - { - "pk": "132", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A system for managing library compile\/link flags", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "3", - "pkgname": "pkgconfig", - "arch": 2, - "pkgver": "0.22" - } - }, - { - "pk": "133", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A commandline option parser", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "3", - "pkgname": "popt", - "arch": 2, - "pkgver": "1.10.6" - } - }, - { - "pk": "134", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "RPC connection manager", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "2", - "pkgname": "portmap", - "arch": 2, - "pkgver": "6.0" - } - }, - { - "pk": "135", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A daemon which implements the PPP protocol for dial-up networking", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "6", - "pkgname": "ppp", - "arch": 2, - "pkgver": "2.4.4" - } - }, - { - "pk": "136", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Client for the proprietary Microsoft Point-to-Point Tunneling Protocol, PPTP.", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "3", - "pkgname": "pptpclient", - "arch": 2, - "pkgver": "1.7.1" - } - }, - { - "pk": "137", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Displays useful information from \/proc", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "2", - "pkgname": "procinfo", - "arch": 2, - "pkgver": "19" - } - }, - { - "pk": "138", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Utilities for monitoring your system and processes on your system", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "4", - "pkgname": "procps", - "arch": 2, - "pkgver": "3.2.7" - } - }, - { - "pk": "139", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Miscellaneous procfs tools", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "1", - "pkgname": "psmisc", - "arch": 2, - "pkgver": "22.6" - } - }, - { - "pk": "140", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "GNU readline library", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "7", - "pkgname": "readline", - "arch": 2, - "pkgver": "5.2" - } - }, - { - "pk": "141", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Reiserfs utilities", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "3", - "pkgname": "reiserfsprogs", - "arch": 2, - "pkgver": "3.6.20" - } - }, - { - "pk": "142", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Roaring Penguin's Point-to-Point Protocol over Ethernet client", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "3", - "pkgname": "rp-pppoe", - "arch": 2, - "pkgver": "3.8" - } - }, - { - "pk": "143", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Drivers for rt2500 chipset wireless cards", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "21", - "pkgname": "rt2500", - "arch": 2, - "pkgver": "1.1.0_B4" - } - }, - { - "pk": "144", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Firmware for the rt2x00 wireless drivers", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "2", - "pkgname": "rt2x00-rt61-fw", - "arch": 2, - "pkgver": "1.2" - } - }, - { - "pk": "145", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Firmware for the rt2x00 wireless drivers", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "2", - "pkgname": "rt2x00-rt71w-fw", - "arch": 2, - "pkgver": "1.8" - } - }, - { - "pk": "146", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "An utility similar to hdparm but for SCSI devices", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "2", - "pkgname": "sdparm", - "arch": 2, - "pkgver": "1.02" - } - }, - { - "pk": "147", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "GNU stream editor", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "3", - "pkgname": "sed", - "arch": 2, - "pkgver": "4.1.5" - } - }, - { - "pk": "148", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Shadow password file utilities", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "2", - "pkgname": "shadow", - "arch": 2, - "pkgver": "4.0.18.2" - } - }, - { - "pk": "149", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Give certain users the ability to run some commands as root", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "1", - "pkgname": "sudo", - "arch": 2, - "pkgver": "1.6.9p12" - } - }, - { - "pk": "150", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "System Utilities Based on Sysfs", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "4", - "pkgname": "sysfsutils", - "arch": 2, - "pkgver": "2.1.0" - } - }, - { - "pk": "151", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Next-generation syslogd with advanced networking and filtering capabilities", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "1", - "pkgname": "syslog-ng", - "arch": 2, - "pkgver": "2.0.6" - } - }, - { - "pk": "152", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Linux System V Init", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "4", - "pkgname": "sysvinit", - "arch": 2, - "pkgver": "2.86" - } - }, - { - "pk": "153", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Utility used to store, backup, and transport files", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "2", - "pkgname": "tar", - "arch": 2, - "pkgver": "1.19" - } - }, - { - "pk": "154", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Monitors and Controls incoming TCP connections", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "8", - "pkgname": "tcp_wrappers", - "arch": 2, - "pkgver": "7.6" - } - }, - { - "pk": "155", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Utilities to work with and produce manuals, ASCII text, and on-line documentation from a single source file", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "2", - "pkgname": "texinfo", - "arch": 2, - "pkgver": "4.11" - } - }, - { - "pk": "156", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "OpenSource module for Texas Instruments ACX100\/ACX111 wireless chips. For stock arch 2.6 kernel", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "3", - "pkgname": "tiacx", - "arch": 2, - "pkgver": "20080210" - } - }, - { - "pk": "157", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Firmware for Texas Instruments ACX100\/ACX111 wireless chips.", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "1", - "pkgname": "tiacx-firmware", - "arch": 2, - "pkgver": "2" - } - }, - { - "pk": "158", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Sources for time zone and daylight saving time data", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "1", - "pkgname": "tzdata", - "arch": 2, - "pkgver": "2008b" - } - }, - { - "pk": "159", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "The userspace dev tools (udev)", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "1", - "pkgname": "udev", - "arch": 2, - "pkgver": "119" - } - }, - { - "pk": "160", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "USB Device Utilities", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "5", - "pkgname": "usbutils", - "arch": 2, - "pkgver": "0.73" - } - }, - { - "pk": "161", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Miscellaneous system utilities for Linux", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "2", - "pkgname": "util-linux-ng", - "arch": 2, - "pkgver": "2.13.0.1" - } - }, - { - "pk": "162", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "a highly configurable, improved version of the vi text editor (basic version)", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "1", - "pkgname": "vi", - "arch": 2, - "pkgver": "7.1.267" - } - }, - { - "pk": "163", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "VPN client for cisco3000 VPN Concentrators", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "2", - "pkgname": "vpnc", - "arch": 2, - "pkgver": "0.5.1" - } - }, - { - "pk": "164", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A network utility to retrieve files from the Web", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "1", - "pkgname": "wget", - "arch": 2, - "pkgver": "1.11" - } - }, - { - "pk": "165", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A utility to show the full path of commands", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "2", - "pkgname": "which", - "arch": 2, - "pkgver": "2.19" - } - }, - { - "pk": "166", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Wireless Tools", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "2", - "pkgname": "wireless_tools", - "arch": 2, - "pkgver": "29" - } - }, - { - "pk": "167", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Wireless Lan usb modules. For kernel26.", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "15", - "pkgname": "wlan-ng26", - "arch": 2, - "pkgver": "0.2.8" - } - }, - { - "pk": "168", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Wireless Lan userspace tools.", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "2", - "pkgname": "wlan-ng26-utils", - "arch": 2, - "pkgver": "0.2.8" - } - }, - { - "pk": "169", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A utility providing key negotiation for WPA wireless networks", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "1", - "pkgname": "wpa_supplicant", - "arch": 2, - "pkgver": "0.5.10" - } - }, - { - "pk": "170", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "XFS filesystem utilities", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "1", - "pkgname": "xfsprogs", - "arch": 2, - "pkgver": "2.9.7" - } - }, - { - "pk": "171", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "xinetd is a secure replacement for inetd", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "3", - "pkgname": "xinetd", - "arch": 2, - "pkgver": "2.3.14" - } - }, - { - "pk": "172", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Firmware for the in-kernel26 zd1211rw wireless driver", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "2", - "pkgname": "zd1211-firmware", - "arch": 2, - "pkgver": "1.4" - } - }, - { - "pk": "173", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A compression\/decompression Library", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:02:44", - "repo": 1, - "pkgrel": "4", - "pkgname": "zlib", - "arch": 2, - "pkgver": "1.2.3" - } - }, - { - "pk": "174", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Utilities to download and work with the Arch Build System (ABS)", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "3", - "pkgname": "abs", - "arch": 3, - "pkgver": "2.0" - } - }, - { - "pk": "175", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Library for filesystem ACL support", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "1", - "pkgname": "acl", - "arch": 3, - "pkgver": "2.2.47" - } - }, - { - "pk": "176", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Drivers for atl2 ethernet card", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "1", - "pkgname": "atl2", - "arch": 3, - "pkgver": "2.0.4" - } - }, - { - "pk": "177", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Extended attribute support library for ACL support", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "1", - "pkgname": "attr", - "arch": 3, - "pkgver": "2.4.41" - } - }, - { - "pk": "178", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A GNU tool for automatically configuring source code", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "3", - "pkgname": "autoconf", - "arch": 3, - "pkgver": "2.61" - } - }, - { - "pk": "179", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A GNU tool for automatically creating Makefiles", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "2", - "pkgname": "automake", - "arch": 3, - "pkgver": "1.10.1" - } - }, - { - "pk": "180", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "The GNU Bourne Again shell", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "2", - "pkgname": "bash", - "arch": 3, - "pkgver": "3.2.033" - } - }, - { - "pk": "181", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "firmware extractor for the bcm43xx kernel module", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "2", - "pkgname": "bcm43xx-fwcutter", - "arch": 3, - "pkgver": "006" - } - }, - { - "pk": "182", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A complete 8086 assembler and loader", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "3", - "pkgname": "bin86", - "arch": 3, - "pkgver": "0.16.17" - } - }, - { - "pk": "183", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A set of programs to assemble and manipulate binary and object files", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "6", - "pkgname": "binutils", - "arch": 3, - "pkgver": "2.18" - } - }, - { - "pk": "184", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "The GNU general-purpose parser generator", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "4", - "pkgname": "bison", - "arch": 3, - "pkgver": "2.3" - } - }, - { - "pk": "185", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Layer2 ethernet bridging for Linux", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "2", - "pkgname": "bridge-utils", - "arch": 3, - "pkgver": "1.2" - } - }, - { - "pk": "186", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A high-quality data compression program", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "3", - "pkgname": "bzip2", - "arch": 3, - "pkgver": "1.0.4" - } - }, - { - "pk": "187", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "capi utils for isdn cards", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "6", - "pkgname": "capi4k-utils", - "arch": 3, - "pkgver": "050718" - } - }, - { - "pk": "188", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "The basic file, shell and text manipulation utilities of the GNU operating system", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "2", - "pkgname": "coreutils", - "arch": 3, - "pkgver": "6.10" - } - }, - { - "pk": "189", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A tool to copy files into or out of a cpio or tar archive", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "3", - "pkgname": "cpio", - "arch": 3, - "pkgver": "2.9" - } - }, - { - "pk": "190", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Password Checking Library", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "5", - "pkgname": "cracklib", - "arch": 3, - "pkgver": "2.8.10" - } - }, - { - "pk": "191", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Userspace setup tool for transparent encryption of block devices using the Linux 2.6 cryptoapi", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "1", - "pkgname": "cryptsetup", - "arch": 3, - "pkgver": "1.0.6" - } - }, - { - "pk": "192", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "csup - cvsup rewritten in C", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "5", - "pkgname": "csup", - "arch": 3, - "pkgver": "20060318" - } - }, - { - "pk": "193", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A POSIX compliant shell that aims to be as small as possible", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "4", - "pkgname": "dash", - "arch": 3, - "pkgver": "0.5.4" - } - }, - { - "pk": "194", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "The Berkeley DB embedded database system", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "2", - "pkgname": "db", - "arch": 3, - "pkgver": "4.6.21" - } - }, - { - "pk": "195", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Dillon's Cron Daemon", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "3", - "pkgname": "dcron", - "arch": 3, - "pkgver": "3.2" - } - }, - { - "pk": "196", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Device mapper userspace library and tools.", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "1", - "pkgname": "device-mapper", - "arch": 3, - "pkgver": "1.02.24" - } - }, - { - "pk": "197", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A DHCP client daemon", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "1", - "pkgname": "dhcpcd", - "arch": 3, - "pkgver": "3.2.1" - } - }, - { - "pk": "198", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A tool to display dialog boxes from shell scripts", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "1", - "pkgname": "dialog", - "arch": 3, - "pkgver": "1.1_20071028" - } - }, - { - "pk": "199", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Utility programs used for creating patch files", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "5", - "pkgname": "diffutils", - "arch": 3, - "pkgver": "2.8.1" - } - }, - { - "pk": "200", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Data migration API", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "3", - "pkgname": "dmapi", - "arch": 3, - "pkgver": "2.2.8" - } - }, - { - "pk": "201", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Device mapper RAID interface", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "4", - "pkgname": "dmraid", - "arch": 3, - "pkgver": "1.0.0.rc14" - } - }, - { - "pk": "202", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Various DNS utilities - dig host nslookup nsupdate", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "1", - "pkgname": "dnsutils", - "arch": 3, - "pkgver": "9.4.2" - } - }, - { - "pk": "203", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "DOS filesystem utilities", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "2", - "pkgname": "dosfstools", - "arch": 3, - "pkgver": "2.11" - } - }, - { - "pk": "204", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Ext2 filesystem utilities", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "1", - "pkgname": "e2fsprogs", - "arch": 3, - "pkgver": "1.40.8" - } - }, - { - "pk": "205", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A POSIX-compliant line editor", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "1", - "pkgname": "ed", - "arch": 3, - "pkgver": "0.9" - } - }, - { - "pk": "206", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A new API to format and send structured log messages", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "2", - "pkgname": "eventlog", - "arch": 3, - "pkgver": "0.2.5" - } - }, - { - "pk": "207", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Gives a fake root environment, useful for building packages as a non-privileged user", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "1", - "pkgname": "fakeroot", - "arch": 3, - "pkgver": "1.9.3" - } - }, - { - "pk": "208", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "File type identification utility", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "1", - "pkgname": "file", - "arch": 3, - "pkgver": "4.23" - } - }, - { - "pk": "209", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Base filesystem", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "2", - "pkgname": "filesystem", - "arch": 3, - "pkgver": "2008.03" - } - }, - { - "pk": "210", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "GNU utilities to locate files", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "1", - "pkgname": "findutils", - "arch": 3, - "pkgver": "4.2.33" - } - }, - { - "pk": "211", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A tool for generating text-scanning programs", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "4", - "pkgname": "flex", - "arch": 3, - "pkgver": "2.5.33" - } - }, - { - "pk": "212", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A library that makes it possible to implement a filesystem in a userspace program.", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "1", - "pkgname": "fuse", - "arch": 3, - "pkgver": "2.7.3" - } - }, - { - "pk": "213", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Gnu version of awk", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "2", - "pkgname": "gawk", - "arch": 3, - "pkgver": "3.1.6" - } - }, - { - "pk": "214", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "The GNU Compiler Collection", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "1", - "pkgname": "gcc", - "arch": 3, - "pkgver": "4.3.0" - } - }, - { - "pk": "215", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Runtime libraries shipped by GCC for C and C++ languages", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "1", - "pkgname": "gcc-libs", - "arch": 3, - "pkgver": "4.3.0" - } - }, - { - "pk": "216", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "GNU database library", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "5", - "pkgname": "gdbm", - "arch": 3, - "pkgver": "1.8.3" - } - }, - { - "pk": "217", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Program to compress initramfs images", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "3", - "pkgname": "gen-init-cpio", - "arch": 3, - "pkgver": "2.6.17" - } - }, - { - "pk": "218", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "GNU internationalization library", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "1", - "pkgname": "gettext", - "arch": 3, - "pkgver": "0.17" - } - }, - { - "pk": "219", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Common C routines used by GTK+ 2.4 and other libs", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "1", - "pkgname": "glib2", - "arch": 3, - "pkgver": "2.16.3" - } - }, - { - "pk": "220", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "GNU C Library", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "9", - "pkgname": "glibc", - "arch": 3, - "pkgver": "2.7" - } - }, - { - "pk": "221", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A free library for arbitrary precision arithmetic", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "2", - "pkgname": "gmp", - "arch": 3, - "pkgver": "4.2.2" - } - }, - { - "pk": "222", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A mouse server for the console and xterm", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "7", - "pkgname": "gpm", - "arch": 3, - "pkgver": "1.20.1" - } - }, - { - "pk": "223", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A string search utility", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "3", - "pkgname": "grep", - "arch": 3, - "pkgver": "2.5.3" - } - }, - { - "pk": "224", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "GNU troff text-formatting system", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "4", - "pkgname": "groff", - "arch": 3, - "pkgver": "1.19.2" - } - }, - { - "pk": "225", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A GNU multiboot boot loader", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "12", - "pkgname": "grub", - "arch": 3, - "pkgver": "0.97" - } - }, - { - "pk": "226", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "GNU compression utility", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "4", - "pkgname": "gzip", - "arch": 3, - "pkgver": "1.3.12" - } - }, - { - "pk": "227", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A shell utility for manipulating Linux IDE drive\/driver parameters", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "1", - "pkgname": "hdparm", - "arch": 3, - "pkgver": "8.6" - } - }, - { - "pk": "228", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Heimdal Kerberos V5 libraries", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "2", - "pkgname": "heimdal", - "arch": 3, - "pkgver": "1.0.1" - } - }, - { - "pk": "229", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Hardware detection script with loading modules and mkinitcpio.conf \/ rc.conf support", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "1", - "pkgname": "hwdetect", - "arch": 3, - "pkgver": "0.9" - } - }, - { - "pk": "230", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Utility for bonding ethernet interfaces", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "3", - "pkgname": "ifenslave", - "arch": 3, - "pkgver": "1.1.0" - } - }, - { - "pk": "231", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "System initialization\/bootup scripts", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "4", - "pkgname": "initscripts", - "arch": 3, - "pkgver": "2008.03" - } - }, - { - "pk": "232", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "IP Routing Utilities", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "1", - "pkgname": "iproute", - "arch": 3, - "pkgver": "2.6.24_rc7" - } - }, - { - "pk": "233", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A Linux kernel packet control tool", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "2", - "pkgname": "iptables", - "arch": 3, - "pkgver": "1.4.0" - } - }, - { - "pk": "234", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "IP Configuration Utilities (and Ping)", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "4", - "pkgname": "iputils", - "arch": 3, - "pkgver": "20070202" - } - }, - { - "pk": "235", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Intel Centrino Drivers firmware for IPW2100", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "2", - "pkgname": "ipw2100-fw", - "arch": 3, - "pkgver": "1.3" - } - }, - { - "pk": "236", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Intel Centrino Drivers firmware for IPW2200", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "2", - "pkgname": "ipw2200-fw", - "arch": 3, - "pkgver": "3.0" - } - }, - { - "pk": "237", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Driver for the Intel PRO\/Wireless 3945ABG miniPCI express adapter", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "8", - "pkgname": "ipw3945", - "arch": 3, - "pkgver": "1.2.2" - } - }, - { - "pk": "238", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Intel Centrino Drivers firmware for IPW3945", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "2", - "pkgname": "ipw3945-ucode", - "arch": 3, - "pkgver": "1.14.2" - } - }, - { - "pk": "239", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Regulatory daemon for IPW3945", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "4", - "pkgname": "ipw3945d", - "arch": 3, - "pkgver": "1.7.22" - } - }, - { - "pk": "240", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "User space administration programs and tools for ISDN", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "3", - "pkgname": "isdn4k-utils", - "arch": 3, - "pkgver": "3.2p1" - } - }, - { - "pk": "241", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Intel wireless firmware for IPW3945 (iwlwifi driver)", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "2", - "pkgname": "iwlwifi-3945-ucode", - "arch": 3, - "pkgver": "2.14.1.5" - } - }, - { - "pk": "242", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Intel wireless firmware for IPW4965 (iwlwifi driver)", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "1", - "pkgname": "iwlwifi-4965-ucode", - "arch": 3, - "pkgver": "4.44.1.20" - } - }, - { - "pk": "243", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "JFS filesystem utilities", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "2", - "pkgname": "jfsutils", - "arch": 3, - "pkgver": "1.1.12" - } - }, - { - "pk": "244", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Keytable files and keyboard utilities", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "2", - "pkgname": "kbd", - "arch": 3, - "pkgver": "1.14.1.20080309" - } - }, - { - "pk": "245", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Kernel headers sanitized for use in userspace", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "1", - "pkgname": "kernel-headers", - "arch": 3, - "pkgver": "2.6.24.3" - } - }, - { - "pk": "246", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "The Linux Kernel and modules", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "1", - "pkgname": "kernel26", - "arch": 3, - "pkgver": "2.6.24.4" - } - }, - { - "pk": "247", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "a minimal libc made for early-userspace", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "5", - "pkgname": "klibc", - "arch": 3, - "pkgver": "1.5" - } - }, - { - "pk": "248", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Extra apps for klibc early-userspace", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "1", - "pkgname": "klibc-extras", - "arch": 3, - "pkgver": "2.4" - } - }, - { - "pk": "249", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Keytable files and keyboard utilities", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "5", - "pkgname": "klibc-kbd", - "arch": 3, - "pkgver": "1.15.20080312" - } - }, - { - "pk": "250", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Utilities for inserting and removing modules from the Linux kernel", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "3", - "pkgname": "klibc-module-init-tools", - "arch": 3, - "pkgver": "3.2.2" - } - }, - { - "pk": "251", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "udevd compiled under klibc", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "3", - "pkgname": "klibc-udev", - "arch": 3, - "pkgver": "116" - } - }, - { - "pk": "252", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A terminal based program for viewing text files", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "1", - "pkgname": "less", - "arch": 3, - "pkgver": "418" - } - }, - { - "pk": "253", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "library that can create and read several streaming archive formats", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "1", - "pkgname": "libarchive", - "arch": 3, - "pkgver": "2.4.17" - } - }, - { - "pk": "254", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "URL based download library, forked from libfetch", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "1", - "pkgname": "libdownload", - "arch": 3, - "pkgver": "1.3" - } - }, - { - "pk": "255", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "libelf is a free ELF object file access library", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "3.1", - "pkgname": "libelf", - "arch": 3, - "pkgver": "0.8.10" - } - }, - { - "pk": "256", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "a mechanism to execute a callback function when a specific event occurs on a file descriptor or after a timeout has been reached", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "1", - "pkgname": "libevent", - "arch": 3, - "pkgver": "1.3e" - } - }, - { - "pk": "257", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "a general purpose crypto library based on the code used", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "1", - "pkgname": "libgcrypt", - "arch": 3, - "pkgver": "1.4.0" - } - }, - { - "pk": "258", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Support library for libgcrypt", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "1", - "pkgname": "libgpg-error", - "arch": 3, - "pkgver": "1.6" - } - }, - { - "pk": "259", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "LDAP client libraries", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "2", - "pkgname": "libldap", - "arch": 3, - "pkgver": "2.3.39" - } - }, - { - "pk": "260", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A system-independent interface for user-level packet capture", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "2", - "pkgname": "libpcap", - "arch": 3, - "pkgver": "0.9.8" - } - }, - { - "pk": "261", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Cyrus Simple Authentication Service Layer (SASL) library", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "5", - "pkgname": "libsasl", - "arch": 3, - "pkgver": "2.1.22" - } - }, - { - "pk": "262", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A generic library support script", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "2", - "pkgname": "libtool", - "arch": 3, - "pkgver": "2.2" - } - }, - { - "pk": "263", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Library to enable user space application programs to communicate with USB devices", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "3", - "pkgname": "libusb", - "arch": 3, - "pkgver": "0.1.12" - } - }, - { - "pk": "264", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "The standard licenses distribution package", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "1", - "pkgname": "licenses", - "arch": 3, - "pkgver": "2.3" - } - }, - { - "pk": "265", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A bootloader for Linux", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "2", - "pkgname": "lilo", - "arch": 3, - "pkgver": "22.8" - } - }, - { - "pk": "266", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A text WWW browser, similar to Lynx", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "1", - "pkgname": "links", - "arch": 3, - "pkgver": "2.1pre33" - } - }, - { - "pk": "267", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Drivers and tools to support ATM networking under Linux.", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "3", - "pkgname": "linux-atm", - "arch": 3, - "pkgver": "2.4.1" - } - }, - { - "pk": "268", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Rotates system logs automatically", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "1", - "pkgname": "logrotate", - "arch": 3, - "pkgver": "3.7.5" - } - }, - { - "pk": "269", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Logical Volume Manager 2 utilities", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "1", - "pkgname": "lvm2", - "arch": 3, - "pkgver": "2.02.33" - } - }, - { - "pk": "270", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "a portable lossless data compression library written in ANSI C", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "3", - "pkgname": "lzo2", - "arch": 3, - "pkgver": "2.02" - } - }, - { - "pk": "271", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "m4 macro processor", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "3", - "pkgname": "m4", - "arch": 3, - "pkgver": "1.4.10" - } - }, - { - "pk": "272", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Madwifi drivers for Atheros wireless chipsets. For stock arch 2.6 kernel", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "3", - "pkgname": "madwifi", - "arch": 3, - "pkgver": "0.9.4.3382" - } - }, - { - "pk": "273", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Userspace tools of madwifi drivers for Atheros wireless chipsets.", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "1", - "pkgname": "madwifi-utils", - "arch": 3, - "pkgver": "0.9.4.3382" - } - }, - { - "pk": "274", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A commandline utility for sending email", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "5", - "pkgname": "mailx", - "arch": 3, - "pkgver": "8.1.1" - } - }, - { - "pk": "275", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "GNU make utility to maintain groups of programs", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "3", - "pkgname": "make", - "arch": 3, - "pkgver": "3.81" - } - }, - { - "pk": "276", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A utility for reading man pages", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "2", - "pkgname": "man", - "arch": 3, - "pkgver": "1.6f" - } - }, - { - "pk": "277", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Linux man pages", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "1", - "pkgname": "man-pages", - "arch": 3, - "pkgver": "2.79" - } - }, - { - "pk": "278", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A tool for managing\/monitoring Linux md device arrays, also known as Software RAID", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "1", - "pkgname": "mdadm", - "arch": 3, - "pkgver": "2.6.4" - } - }, - { - "pk": "279", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Advanced, modular initramfs image creation utility", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "1", - "pkgname": "mkinitcpio", - "arch": 3, - "pkgver": "0.5.18.1" - } - }, - { - "pk": "280", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Faster merging drop-in for slocate", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "2", - "pkgname": "mlocate", - "arch": 3, - "pkgver": "0.18" - } - }, - { - "pk": "281", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Utilities for inserting and removing modules from the Linux kernel", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "6", - "pkgname": "module-init-tools", - "arch": 3, - "pkgver": "3.2.2" - } - }, - { - "pk": "282", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "multiple-precision floating-point library", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "1", - "pkgname": "mpfr", - "arch": 3, - "pkgver": "2.3.1" - } - }, - { - "pk": "283", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Pico editor clone with enhancements", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "1", - "pkgname": "nano", - "arch": 3, - "pkgver": "2.0.7" - } - }, - { - "pk": "284", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A System V Release 4.0 curses emulation library", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "6", - "pkgname": "ncurses", - "arch": 3, - "pkgver": "5.6" - } - }, - { - "pk": "285", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Module for NDIS (Windows Network Drivers) drivers supplied by vendors. For stock arch 2.6 kernel.", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "2", - "pkgname": "ndiswrapper", - "arch": 3, - "pkgver": "1.52" - } - }, - { - "pk": "286", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Binaries for ndiswrapper module", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "1", - "pkgname": "ndiswrapper-utils", - "arch": 3, - "pkgver": "1.52" - } - }, - { - "pk": "287", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Configuration tools for Linux networking", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "13", - "pkgname": "net-tools", - "arch": 3, - "pkgver": "1.60" - } - }, - { - "pk": "288", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Network configuration and profile scripts", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "1", - "pkgname": "netcfg", - "arch": 3, - "pkgver": "2.0.6" - } - }, - { - "pk": "289", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A telnet client (and server)", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "7", - "pkgname": "netkit-telnet", - "arch": 3, - "pkgver": "0.17" - } - }, - { - "pk": "290", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Support programs for Network File Systems", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "4", - "pkgname": "nfs-utils", - "arch": 3, - "pkgver": "1.1.0" - } - }, - { - "pk": "291", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Library to help mapping IDs, mainly for NFSv4", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "2", - "pkgname": "nfsidmap", - "arch": 3, - "pkgver": "0.20" - } - }, - { - "pk": "292", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Third generation Linux NTFS driver", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "1", - "pkgname": "ntfs-3g", - "arch": 3, - "pkgver": "1.2310" - } - }, - { - "pk": "293", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "NTFS Resizing Tool", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "2", - "pkgname": "ntfsprogs", - "arch": 3, - "pkgver": "2.0.0" - } - }, - { - "pk": "294", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A Secure SHell server\/client", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "6", - "pkgname": "openssh", - "arch": 3, - "pkgver": "4.7p1" - } - }, - { - "pk": "295", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "The Open Source toolkit for Secure Sockets Layer and Transport Layer Security", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "2", - "pkgname": "openssl", - "arch": 3, - "pkgver": "0.9.8g" - } - }, - { - "pk": "296", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Open Source implementation of IPsec for the Linux operating system", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "1", - "pkgname": "openswan", - "arch": 3, - "pkgver": "2.4.11" - } - }, - { - "pk": "297", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "An easy-to-use, robust, and highly configurable VPN (Virtual Private Network)", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "3", - "pkgname": "openvpn", - "arch": 3, - "pkgver": "2.0.9" - } - }, - { - "pk": "298", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A library-based package manager with dependency support", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "1", - "pkgname": "pacman", - "arch": 3, - "pkgver": "3.1.4" - } - }, - { - "pk": "299", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "PAM (Pluggable Authentication Modules) library", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "2", - "pkgname": "pam", - "arch": 3, - "pkgver": "0.99.9.0" - } - }, - { - "pk": "300", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A utility to apply patch files to original sources", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "4", - "pkgname": "patch", - "arch": 3, - "pkgver": "2.5.4" - } - }, - { - "pk": "301", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "PCI bus configuration space access library and tools", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "3", - "pkgname": "pciutils", - "arch": 3, - "pkgver": "2.2.8" - } - }, - { - "pk": "302", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Utilities for inserting and removing PCMCIA cards", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "4", - "pkgname": "pcmciautils", - "arch": 3, - "pkgver": "014" - } - }, - { - "pk": "303", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A library that implements Perl 5-style regular expressions", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "3", - "pkgname": "pcre", - "arch": 3, - "pkgver": "7.6" - } - }, - { - "pk": "304", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Practical Extraction and Report Language", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "3", - "pkgname": "perl", - "arch": 3, - "pkgver": "5.10.0" - } - }, - { - "pk": "305", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A system for managing library compile\/link flags", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "3", - "pkgname": "pkgconfig", - "arch": 3, - "pkgver": "0.22" - } - }, - { - "pk": "306", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A commandline option parser", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "3", - "pkgname": "popt", - "arch": 3, - "pkgver": "1.10.6" - } - }, - { - "pk": "307", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "RPC connection manager", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "2", - "pkgname": "portmap", - "arch": 3, - "pkgver": "6.0" - } - }, - { - "pk": "308", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A daemon which implements the PPP protocol for dial-up networking", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "6", - "pkgname": "ppp", - "arch": 3, - "pkgver": "2.4.4" - } - }, - { - "pk": "309", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Client for the proprietary Microsoft Point-to-Point Tunneling Protocol, PPTP.", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "3", - "pkgname": "pptpclient", - "arch": 3, - "pkgver": "1.7.1" - } - }, - { - "pk": "310", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Displays useful information from \/proc", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "2", - "pkgname": "procinfo", - "arch": 3, - "pkgver": "19" - } - }, - { - "pk": "311", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Utilities for monitoring your system and processes on your system", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "4", - "pkgname": "procps", - "arch": 3, - "pkgver": "3.2.7" - } - }, - { - "pk": "312", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Miscellaneous procfs tools", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "1", - "pkgname": "psmisc", - "arch": 3, - "pkgver": "22.6" - } - }, - { - "pk": "313", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "GNU readline library", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "7", - "pkgname": "readline", - "arch": 3, - "pkgver": "5.2" - } - }, - { - "pk": "314", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Reiserfs utilities", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "3", - "pkgname": "reiserfsprogs", - "arch": 3, - "pkgver": "3.6.20" - } - }, - { - "pk": "315", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Roaring Penguin's Point-to-Point Protocol over Ethernet client", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "3", - "pkgname": "rp-pppoe", - "arch": 3, - "pkgver": "3.8" - } - }, - { - "pk": "316", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Drivers for rt2500 chipset wireless cards", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "21", - "pkgname": "rt2500", - "arch": 3, - "pkgver": "1.1.0_B4" - } - }, - { - "pk": "317", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Firmware for the rt2x00 wireless drivers", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "2", - "pkgname": "rt2x00-rt61-fw", - "arch": 3, - "pkgver": "1.2" - } - }, - { - "pk": "318", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Firmware for the rt2x00 wireless drivers", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "2", - "pkgname": "rt2x00-rt71w-fw", - "arch": 3, - "pkgver": "1.8" - } - }, - { - "pk": "319", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "An utility similar to hdparm but for SCSI devices", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "2", - "pkgname": "sdparm", - "arch": 3, - "pkgver": "1.02" - } - }, - { - "pk": "320", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "GNU stream editor", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "3", - "pkgname": "sed", - "arch": 3, - "pkgver": "4.1.5" - } - }, - { - "pk": "321", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Shadow password file utilities", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "2", - "pkgname": "shadow", - "arch": 3, - "pkgver": "4.0.18.2" - } - }, - { - "pk": "322", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Give certain users the ability to run some commands as root", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "1", - "pkgname": "sudo", - "arch": 3, - "pkgver": "1.6.9p12" - } - }, - { - "pk": "323", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "System Utilities Based on Sysfs", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "4", - "pkgname": "sysfsutils", - "arch": 3, - "pkgver": "2.1.0" - } - }, - { - "pk": "324", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Next-generation syslogd with advanced networking and filtering capabilities", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "1", - "pkgname": "syslog-ng", - "arch": 3, - "pkgver": "2.0.6" - } - }, - { - "pk": "325", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Linux System V Init", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "4", - "pkgname": "sysvinit", - "arch": 3, - "pkgver": "2.86" - } - }, - { - "pk": "326", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Utility used to store, backup, and transport files", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "2", - "pkgname": "tar", - "arch": 3, - "pkgver": "1.19" - } - }, - { - "pk": "327", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Monitors and Controls incoming TCP connections", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "8", - "pkgname": "tcp_wrappers", - "arch": 3, - "pkgver": "7.6" - } - }, - { - "pk": "328", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Utilities to work with and produce manuals, ASCII text, and on-line documentation from a single source file", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "2", - "pkgname": "texinfo", - "arch": 3, - "pkgver": "4.11" - } - }, - { - "pk": "329", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "OpenSource module for Texas Instruments ACX100\/ACX111 wireless chips. For stock arch 2.6 kernel", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "3", - "pkgname": "tiacx", - "arch": 3, - "pkgver": "20080210" - } - }, - { - "pk": "330", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Firmware for Texas Instruments ACX100\/ACX111 wireless chips.", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "1", - "pkgname": "tiacx-firmware", - "arch": 3, - "pkgver": "2" - } - }, - { - "pk": "331", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Sources for time zone and daylight saving time data", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "1", - "pkgname": "tzdata", - "arch": 3, - "pkgver": "2008b" - } - }, - { - "pk": "332", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "The userspace dev tools (udev)", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "1", - "pkgname": "udev", - "arch": 3, - "pkgver": "119" - } - }, - { - "pk": "333", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "USB Device Utilities", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "5", - "pkgname": "usbutils", - "arch": 3, - "pkgver": "0.73" - } - }, - { - "pk": "334", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Miscellaneous system utilities for Linux", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "2", - "pkgname": "util-linux-ng", - "arch": 3, - "pkgver": "2.13.0.1" - } - }, - { - "pk": "335", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "a highly configurable, improved version of the vi text editor (basic version)", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "1", - "pkgname": "vi", - "arch": 3, - "pkgver": "7.1.267" - } - }, - { - "pk": "336", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "VPN client for cisco3000 VPN Concentrators", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "2", - "pkgname": "vpnc", - "arch": 3, - "pkgver": "0.5.1" - } - }, - { - "pk": "337", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A network utility to retrieve files from the Web", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "1", - "pkgname": "wget", - "arch": 3, - "pkgver": "1.11" - } - }, - { - "pk": "338", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A utility to show the full path of commands", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "2", - "pkgname": "which", - "arch": 3, - "pkgver": "2.19" - } - }, - { - "pk": "339", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Wireless Tools", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "2", - "pkgname": "wireless_tools", - "arch": 3, - "pkgver": "29" - } - }, - { - "pk": "340", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Wireless Lan usb modules. For kernel26.", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "15", - "pkgname": "wlan-ng26", - "arch": 3, - "pkgver": "0.2.8" - } - }, - { - "pk": "341", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Wireless Lan userspace tools.", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "2", - "pkgname": "wlan-ng26-utils", - "arch": 3, - "pkgver": "0.2.8" - } - }, - { - "pk": "342", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A utility providing key negotiation for WPA wireless networks", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "1", - "pkgname": "wpa_supplicant", - "arch": 3, - "pkgver": "0.5.10" - } - }, - { - "pk": "343", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "XFS filesystem utilities", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "1", - "pkgname": "xfsprogs", - "arch": 3, - "pkgver": "2.9.7" - } - }, - { - "pk": "344", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "xinetd is a secure replacement for inetd", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "3", - "pkgname": "xinetd", - "arch": 3, - "pkgver": "2.3.14" - } - }, - { - "pk": "345", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "Firmware for the in-kernel26 zd1211rw wireless driver", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "2", - "pkgname": "zd1211-firmware", - "arch": 3, - "pkgver": "1.4" - } - }, - { - "pk": "346", - "model": "main.package", - "fields": { - "maintainer": 1, - "pkgdesc": "A compression\/decompression Library", - "url": "", - "needupdate": 0, - "last_update": "2008-04-18 03:03:05", - "repo": 1, - "pkgrel": "4", - "pkgname": "zlib", - "arch": 3, - "pkgver": "1.2.3" - } - }, - { - "pk": "1", - "model": "main.packagedepend", - "fields": { - "depname": "bash", - "depvcmp": "", - "pkg": 1 - } - }, - { - "pk": "2", - "model": "main.packagedepend", - "fields": { - "depname": "rsync", - "depvcmp": "", - "pkg": 1 - } - }, - { - "pk": "3", - "model": "main.packagedepend", - "fields": { - "depname": "attr", - "depvcmp": ">=2.4.41", - "pkg": 2 - } - }, - { - "pk": "4", - "model": "main.packagedepend", - "fields": { - "depname": "kernel26", - "depvcmp": ">=2.6.24.4-1", - "pkg": 3 - } - }, - { - "pk": "5", - "model": "main.packagedepend", - "fields": { - "depname": "kernel26", - "depvcmp": "<2.6.25", - "pkg": 3 - } - }, - { - "pk": "6", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 4 - } - }, - { - "pk": "7", - "model": "main.packagedepend", - "fields": { - "depname": "awk", - "depvcmp": "", - "pkg": 5 - } - }, - { - "pk": "8", - "model": "main.packagedepend", - "fields": { - "depname": "m4", - "depvcmp": "", - "pkg": 5 - } - }, - { - "pk": "9", - "model": "main.packagedepend", - "fields": { - "depname": "diffutils", - "depvcmp": "", - "pkg": 5 - } - }, - { - "pk": "10", - "model": "main.packagedepend", - "fields": { - "depname": "bash", - "depvcmp": "", - "pkg": 5 - } - }, - { - "pk": "11", - "model": "main.packagedepend", - "fields": { - "depname": "perl", - "depvcmp": "", - "pkg": 6 - } - }, - { - "pk": "12", - "model": "main.packagedepend", - "fields": { - "depname": "bash", - "depvcmp": "", - "pkg": 6 - } - }, - { - "pk": "13", - "model": "main.packagedepend", - "fields": { - "depname": "readline", - "depvcmp": ">=5.2", - "pkg": 7 - } - }, - { - "pk": "14", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 7 - } - }, - { - "pk": "15", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 8 - } - }, - { - "pk": "16", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 9 - } - }, - { - "pk": "17", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": ">=2.7", - "pkg": 10 - } - }, - { - "pk": "18", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 11 - } - }, - { - "pk": "19", - "model": "main.packagedepend", - "fields": { - "depname": "m4", - "depvcmp": "", - "pkg": 11 - } - }, - { - "pk": "20", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 12 - } - }, - { - "pk": "21", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 13 - } - }, - { - "pk": "22", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 14 - } - }, - { - "pk": "23", - "model": "main.packagedepend", - "fields": { - "depname": "bash", - "depvcmp": "", - "pkg": 14 - } - }, - { - "pk": "24", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": ">=2.7-7", - "pkg": 15 - } - }, - { - "pk": "25", - "model": "main.packagedepend", - "fields": { - "depname": "shadow", - "depvcmp": ">=4.0.18.2-2", - "pkg": 15 - } - }, - { - "pk": "26", - "model": "main.packagedepend", - "fields": { - "depname": "pam", - "depvcmp": ">=0.99.9.0-2", - "pkg": 15 - } - }, - { - "pk": "27", - "model": "main.packagedepend", - "fields": { - "depname": "acl", - "depvcmp": ">=2.2.45-2", - "pkg": 15 - } - }, - { - "pk": "28", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 16 - } - }, - { - "pk": "29", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 17 - } - }, - { - "pk": "30", - "model": "main.packagedepend", - "fields": { - "depname": "device-mapper", - "depvcmp": "", - "pkg": 18 - } - }, - { - "pk": "31", - "model": "main.packagedepend", - "fields": { - "depname": "libgcrypt", - "depvcmp": "", - "pkg": 18 - } - }, - { - "pk": "32", - "model": "main.packagedepend", - "fields": { - "depname": "popt", - "depvcmp": "", - "pkg": 18 - } - }, - { - "pk": "33", - "model": "main.packagedepend", - "fields": { - "depname": "e2fsprogs", - "depvcmp": "", - "pkg": 18 - } - }, - { - "pk": "34", - "model": "main.packagedepend", - "fields": { - "depname": "gcc-libs", - "depvcmp": "", - "pkg": 19 - } - }, - { - "pk": "35", - "model": "main.packagedepend", - "fields": { - "depname": "zlib", - "depvcmp": "", - "pkg": 19 - } - }, - { - "pk": "36", - "model": "main.packagedepend", - "fields": { - "depname": "openssl", - "depvcmp": "", - "pkg": 19 - } - }, - { - "pk": "37", - "model": "main.packagedepend", - "fields": { - "depname": "gcc-libs", - "depvcmp": "", - "pkg": 21 - } - }, - { - "pk": "38", - "model": "main.packagedepend", - "fields": { - "depname": "coreutils", - "depvcmp": "", - "pkg": 21 - } - }, - { - "pk": "39", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 22 - } - }, - { - "pk": "40", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 23 - } - }, - { - "pk": "41", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 24 - } - }, - { - "pk": "42", - "model": "main.packagedepend", - "fields": { - "depname": "ncurses", - "depvcmp": "", - "pkg": 25 - } - }, - { - "pk": "43", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 26 - } - }, - { - "pk": "44", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 27 - } - }, - { - "pk": "45", - "model": "main.packagedepend", - "fields": { - "depname": "device-mapper", - "depvcmp": "", - "pkg": 28 - } - }, - { - "pk": "46", - "model": "main.packagedepend", - "fields": { - "depname": "openssl", - "depvcmp": ">=0.9.8e", - "pkg": 29 - } - }, - { - "pk": "47", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 30 - } - }, - { - "pk": "48", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 31 - } - }, - { - "pk": "49", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 32 - } - }, - { - "pk": "50", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 33 - } - }, - { - "pk": "51", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 34 - } - }, - { - "pk": "52", - "model": "main.packagedepend", - "fields": { - "depname": "filesystem", - "depvcmp": "", - "pkg": 34 - } - }, - { - "pk": "53", - "model": "main.packagedepend", - "fields": { - "depname": "grep", - "depvcmp": "", - "pkg": 34 - } - }, - { - "pk": "54", - "model": "main.packagedepend", - "fields": { - "depname": "sed", - "depvcmp": "", - "pkg": 34 - } - }, - { - "pk": "55", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 35 - } - }, - { - "pk": "56", - "model": "main.packagedepend", - "fields": { - "depname": "zlib", - "depvcmp": "", - "pkg": 35 - } - }, - { - "pk": "57", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 37 - } - }, - { - "pk": "58", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 38 - } - }, - { - "pk": "59", - "model": "main.packagedepend", - "fields": { - "depname": "sh", - "depvcmp": "", - "pkg": 38 - } - }, - { - "pk": "60", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 39 - } - }, - { - "pk": "61", - "model": "main.packagedepend", - "fields": { - "depname": "bash", - "depvcmp": "", - "pkg": 40 - } - }, - { - "pk": "62", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 40 - } - }, - { - "pk": "63", - "model": "main.packagedepend", - "fields": { - "depname": "binutils", - "depvcmp": ">=2.18-3", - "pkg": 41 - } - }, - { - "pk": "64", - "model": "main.packagedepend", - "fields": { - "depname": "gcc-libs", - "depvcmp": ">=4.3.0", - "pkg": 41 - } - }, - { - "pk": "65", - "model": "main.packagedepend", - "fields": { - "depname": "mpfr", - "depvcmp": ">=2.3.1", - "pkg": 41 - } - }, - { - "pk": "66", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": ">=2.7", - "pkg": 42 - } - }, - { - "pk": "67", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 43 - } - }, - { - "pk": "68", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 44 - } - }, - { - "pk": "69", - "model": "main.packagedepend", - "fields": { - "depname": "gcc-libs", - "depvcmp": "", - "pkg": 45 - } - }, - { - "pk": "70", - "model": "main.packagedepend", - "fields": { - "depname": "acl", - "depvcmp": "", - "pkg": 45 - } - }, - { - "pk": "71", - "model": "main.packagedepend", - "fields": { - "depname": "pcre", - "depvcmp": ">=7.6-3", - "pkg": 46 - } - }, - { - "pk": "72", - "model": "main.packagedepend", - "fields": { - "depname": "sh", - "depvcmp": "", - "pkg": 47 - } - }, - { - "pk": "73", - "model": "main.packagedepend", - "fields": { - "depname": "kernel-headers", - "depvcmp": ">=2.6.24.3", - "pkg": 47 - } - }, - { - "pk": "74", - "model": "main.packagedepend", - "fields": { - "depname": "tzdata", - "depvcmp": "", - "pkg": 47 - } - }, - { - "pk": "75", - "model": "main.packagedepend", - "fields": { - "depname": "gcc-libs", - "depvcmp": "", - "pkg": 48 - } - }, - { - "pk": "76", - "model": "main.packagedepend", - "fields": { - "depname": "ncurses", - "depvcmp": "", - "pkg": 49 - } - }, - { - "pk": "77", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 50 - } - }, - { - "pk": "78", - "model": "main.packagedepend", - "fields": { - "depname": "pcre", - "depvcmp": "", - "pkg": 50 - } - }, - { - "pk": "79", - "model": "main.packagedepend", - "fields": { - "depname": "perl", - "depvcmp": "", - "pkg": 51 - } - }, - { - "pk": "80", - "model": "main.packagedepend", - "fields": { - "depname": "gcc-libs", - "depvcmp": "", - "pkg": 51 - } - }, - { - "pk": "81", - "model": "main.packagedepend", - "fields": { - "depname": "ncurses", - "depvcmp": "", - "pkg": 52 - } - }, - { - "pk": "82", - "model": "main.packagedepend", - "fields": { - "depname": "diffutils", - "depvcmp": "", - "pkg": 52 - } - }, - { - "pk": "83", - "model": "main.packagedepend", - "fields": { - "depname": "sed", - "depvcmp": "", - "pkg": 52 - } - }, - { - "pk": "84", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 53 - } - }, - { - "pk": "85", - "model": "main.packagedepend", - "fields": { - "depname": "bash", - "depvcmp": "", - "pkg": 53 - } - }, - { - "pk": "86", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 54 - } - }, - { - "pk": "87", - "model": "main.packagedepend", - "fields": { - "depname": "db", - "depvcmp": ">=4.6", - "pkg": 55 - } - }, - { - "pk": "88", - "model": "main.packagedepend", - "fields": { - "depname": "openssl", - "depvcmp": "", - "pkg": 55 - } - }, - { - "pk": "89", - "model": "main.packagedepend", - "fields": { - "depname": "e2fsprogs", - "depvcmp": "", - "pkg": 55 - } - }, - { - "pk": "90", - "model": "main.packagedepend", - "fields": { - "depname": "sh", - "depvcmp": "", - "pkg": 56 - } - }, - { - "pk": "91", - "model": "main.packagedepend", - "fields": { - "depname": "awk", - "depvcmp": "", - "pkg": 56 - } - }, - { - "pk": "92", - "model": "main.packagedepend", - "fields": { - "depname": "grep", - "depvcmp": "", - "pkg": 56 - } - }, - { - "pk": "93", - "model": "main.packagedepend", - "fields": { - "depname": "coreutils", - "depvcmp": "", - "pkg": 56 - } - }, - { - "pk": "94", - "model": "main.packagedepend", - "fields": { - "depname": "sed", - "depvcmp": "", - "pkg": 56 - } - }, - { - "pk": "95", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 57 - } - }, - { - "pk": "96", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 58 - } - }, - { - "pk": "97", - "model": "main.packagedepend", - "fields": { - "depname": "bash", - "depvcmp": "", - "pkg": 58 - } - }, - { - "pk": "98", - "model": "main.packagedepend", - "fields": { - "depname": "awk", - "depvcmp": "", - "pkg": 58 - } - }, - { - "pk": "99", - "model": "main.packagedepend", - "fields": { - "depname": "grep", - "depvcmp": "", - "pkg": 58 - } - }, - { - "pk": "100", - "model": "main.packagedepend", - "fields": { - "depname": "coreutils", - "depvcmp": "", - "pkg": 58 - } - }, - { - "pk": "101", - "model": "main.packagedepend", - "fields": { - "depname": "sed", - "depvcmp": "", - "pkg": 58 - } - }, - { - "pk": "102", - "model": "main.packagedepend", - "fields": { - "depname": "udev", - "depvcmp": ">=118", - "pkg": 58 - } - }, - { - "pk": "103", - "model": "main.packagedepend", - "fields": { - "depname": "net-tools", - "depvcmp": "", - "pkg": 58 - } - }, - { - "pk": "104", - "model": "main.packagedepend", - "fields": { - "depname": "ncurses", - "depvcmp": "", - "pkg": 58 - } - }, - { - "pk": "105", - "model": "main.packagedepend", - "fields": { - "depname": "db", - "depvcmp": ">=4.6", - "pkg": 59 - } - }, - { - "pk": "106", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 60 - } - }, - { - "pk": "107", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 61 - } - }, - { - "pk": "108", - "model": "main.packagedepend", - "fields": { - "depname": "wireless_tools", - "depvcmp": "", - "pkg": 62 - } - }, - { - "pk": "109", - "model": "main.packagedepend", - "fields": { - "depname": "wireless_tools", - "depvcmp": "", - "pkg": 63 - } - }, - { - "pk": "110", - "model": "main.packagedepend", - "fields": { - "depname": "wireless_tools", - "depvcmp": "", - "pkg": 64 - } - }, - { - "pk": "111", - "model": "main.packagedepend", - "fields": { - "depname": "kernel26", - "depvcmp": ">=2.6.24.3-4", - "pkg": 64 - } - }, - { - "pk": "112", - "model": "main.packagedepend", - "fields": { - "depname": "kernel26", - "depvcmp": "<=2.6.25-0", - "pkg": 64 - } - }, - { - "pk": "113", - "model": "main.packagedepend", - "fields": { - "depname": "ipw3945-ucode", - "depvcmp": "", - "pkg": 64 - } - }, - { - "pk": "114", - "model": "main.packagedepend", - "fields": { - "depname": "ipw3945d", - "depvcmp": "", - "pkg": 64 - } - }, - { - "pk": "115", - "model": "main.packagedepend", - "fields": { - "depname": "udev", - "depvcmp": "", - "pkg": 65 - } - }, - { - "pk": "116", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 66 - } - }, - { - "pk": "117", - "model": "main.packagedepend", - "fields": { - "depname": "ncurses", - "depvcmp": "", - "pkg": 67 - } - }, - { - "pk": "118", - "model": "main.packagedepend", - "fields": { - "depname": "e2fsprogs", - "depvcmp": "", - "pkg": 70 - } - }, - { - "pk": "119", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 71 - } - }, - { - "pk": "120", - "model": "main.packagedepend", - "fields": { - "depname": "coreutils", - "depvcmp": "", - "pkg": 73 - } - }, - { - "pk": "121", - "model": "main.packagedepend", - "fields": { - "depname": "module-init-tools", - "depvcmp": "", - "pkg": 73 - } - }, - { - "pk": "122", - "model": "main.packagedepend", - "fields": { - "depname": "mkinitcpio", - "depvcmp": ">=0.5.18", - "pkg": 73 - } - }, - { - "pk": "123", - "model": "main.packagedepend", - "fields": { - "depname": "klibc", - "depvcmp": ">=1.5-4", - "pkg": 75 - } - }, - { - "pk": "124", - "model": "main.packagedepend", - "fields": { - "depname": "klibc", - "depvcmp": ">=1.5-4", - "pkg": 76 - } - }, - { - "pk": "125", - "model": "main.packagedepend", - "fields": { - "depname": "kbd", - "depvcmp": "", - "pkg": 76 - } - }, - { - "pk": "126", - "model": "main.packagedepend", - "fields": { - "depname": "klibc", - "depvcmp": ">=1.5-4", - "pkg": 77 - } - }, - { - "pk": "127", - "model": "main.packagedepend", - "fields": { - "depname": "coreutils", - "depvcmp": "", - "pkg": 78 - } - }, - { - "pk": "128", - "model": "main.packagedepend", - "fields": { - "depname": "klibc", - "depvcmp": ">=1.5-4", - "pkg": 78 - } - }, - { - "pk": "129", - "model": "main.packagedepend", - "fields": { - "depname": "ncurses", - "depvcmp": "", - "pkg": 79 - } - }, - { - "pk": "130", - "model": "main.packagedepend", - "fields": { - "depname": "file", - "depvcmp": "", - "pkg": 79 - } - }, - { - "pk": "131", - "model": "main.packagedepend", - "fields": { - "depname": "zlib", - "depvcmp": "", - "pkg": 80 - } - }, - { - "pk": "132", - "model": "main.packagedepend", - "fields": { - "depname": "bzip2", - "depvcmp": "", - "pkg": 80 - } - }, - { - "pk": "133", - "model": "main.packagedepend", - "fields": { - "depname": "acl", - "depvcmp": "", - "pkg": 80 - } - }, - { - "pk": "134", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 81 - } - }, - { - "pk": "135", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 82 - } - }, - { - "pk": "136", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 83 - } - }, - { - "pk": "137", - "model": "main.packagedepend", - "fields": { - "depname": "libgpg-error", - "depvcmp": ">=1.6", - "pkg": 84 - } - }, - { - "pk": "138", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 85 - } - }, - { - "pk": "139", - "model": "main.packagedepend", - "fields": { - "depname": "libsasl", - "depvcmp": "", - "pkg": 86 - } - }, - { - "pk": "140", - "model": "main.packagedepend", - "fields": { - "depname": "openssl", - "depvcmp": ">=0.9.8f", - "pkg": 86 - } - }, - { - "pk": "141", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 87 - } - }, - { - "pk": "142", - "model": "main.packagedepend", - "fields": { - "depname": "db", - "depvcmp": ">=4.6", - "pkg": 88 - } - }, - { - "pk": "143", - "model": "main.packagedepend", - "fields": { - "depname": "sh", - "depvcmp": "", - "pkg": 89 - } - }, - { - "pk": "144", - "model": "main.packagedepend", - "fields": { - "depname": "gcc-libs", - "depvcmp": "", - "pkg": 90 - } - }, - { - "pk": "145", - "model": "main.packagedepend", - "fields": { - "depname": "device-mapper", - "depvcmp": "", - "pkg": 92 - } - }, - { - "pk": "146", - "model": "main.packagedepend", - "fields": { - "depname": "coreutils", - "depvcmp": "", - "pkg": 92 - } - }, - { - "pk": "147", - "model": "main.packagedepend", - "fields": { - "depname": "bzip2", - "depvcmp": "", - "pkg": 93 - } - }, - { - "pk": "148", - "model": "main.packagedepend", - "fields": { - "depname": "zlib", - "depvcmp": "", - "pkg": 93 - } - }, - { - "pk": "149", - "model": "main.packagedepend", - "fields": { - "depname": "openssl", - "depvcmp": "", - "pkg": 93 - } - }, - { - "pk": "150", - "model": "main.packagedepend", - "fields": { - "depname": "gpm", - "depvcmp": "", - "pkg": 93 - } - }, - { - "pk": "151", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 94 - } - }, - { - "pk": "152", - "model": "main.packagedepend", - "fields": { - "depname": "popt", - "depvcmp": "", - "pkg": 95 - } - }, - { - "pk": "153", - "model": "main.packagedepend", - "fields": { - "depname": "cron", - "depvcmp": "", - "pkg": 95 - } - }, - { - "pk": "154", - "model": "main.packagedepend", - "fields": { - "depname": "gzip", - "depvcmp": "", - "pkg": 95 - } - }, - { - "pk": "155", - "model": "main.packagedepend", - "fields": { - "depname": "device-mapper", - "depvcmp": ">=1.02.22", - "pkg": 96 - } - }, - { - "pk": "156", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 97 - } - }, - { - "pk": "157", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 98 - } - }, - { - "pk": "158", - "model": "main.packagedepend", - "fields": { - "depname": "bash", - "depvcmp": "", - "pkg": 98 - } - }, - { - "pk": "159", - "model": "main.packagedepend", - "fields": { - "depname": "madwifi-utils", - "depvcmp": "", - "pkg": 99 - } - }, - { - "pk": "160", - "model": "main.packagedepend", - "fields": { - "depname": "kernel26", - "depvcmp": ">=2.6.24.3-4", - "pkg": 99 - } - }, - { - "pk": "161", - "model": "main.packagedepend", - "fields": { - "depname": "kernel26", - "depvcmp": "<=2.6.25-0", - "pkg": 99 - } - }, - { - "pk": "162", - "model": "main.packagedepend", - "fields": { - "depname": "wireless_tools", - "depvcmp": "", - "pkg": 100 - } - }, - { - "pk": "163", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 101 - } - }, - { - "pk": "164", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 102 - } - }, - { - "pk": "165", - "model": "main.packagedepend", - "fields": { - "depname": "bash", - "depvcmp": "", - "pkg": 102 - } - }, - { - "pk": "166", - "model": "main.packagedepend", - "fields": { - "depname": "groff", - "depvcmp": "", - "pkg": 103 - } - }, - { - "pk": "167", - "model": "main.packagedepend", - "fields": { - "depname": "less", - "depvcmp": "", - "pkg": 103 - } - }, - { - "pk": "168", - "model": "main.packagedepend", - "fields": { - "depname": "gzip", - "depvcmp": "", - "pkg": 103 - } - }, - { - "pk": "169", - "model": "main.packagedepend", - "fields": { - "depname": "awk", - "depvcmp": "", - "pkg": 103 - } - }, - { - "pk": "170", - "model": "main.packagedepend", - "fields": { - "depname": "coreutils", - "depvcmp": "", - "pkg": 103 - } - }, - { - "pk": "171", - "model": "main.packagedepend", - "fields": { - "depname": "sh", - "depvcmp": "", - "pkg": 103 - } - }, - { - "pk": "172", - "model": "main.packagedepend", - "fields": { - "depname": "diffutils", - "depvcmp": "", - "pkg": 103 - } - }, - { - "pk": "173", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 105 - } - }, - { - "pk": "174", - "model": "main.packagedepend", - "fields": { - "depname": "klibc", - "depvcmp": ">=1.5-5", - "pkg": 106 - } - }, - { - "pk": "175", - "model": "main.packagedepend", - "fields": { - "depname": "klibc-extras", - "depvcmp": ">=2.4", - "pkg": 106 - } - }, - { - "pk": "176", - "model": "main.packagedepend", - "fields": { - "depname": "klibc-udev", - "depvcmp": ">=116-3", - "pkg": 106 - } - }, - { - "pk": "177", - "model": "main.packagedepend", - "fields": { - "depname": "gen-init-cpio", - "depvcmp": "", - "pkg": 106 - } - }, - { - "pk": "178", - "model": "main.packagedepend", - "fields": { - "depname": "klibc-module-init-tools", - "depvcmp": "", - "pkg": 106 - } - }, - { - "pk": "179", - "model": "main.packagedepend", - "fields": { - "depname": "coreutils", - "depvcmp": "", - "pkg": 106 - } - }, - { - "pk": "180", - "model": "main.packagedepend", - "fields": { - "depname": "bash", - "depvcmp": "", - "pkg": 106 - } - }, - { - "pk": "181", - "model": "main.packagedepend", - "fields": { - "depname": "klibc-kbd", - "depvcmp": "", - "pkg": 106 - } - }, - { - "pk": "182", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 107 - } - }, - { - "pk": "183", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 108 - } - }, - { - "pk": "184", - "model": "main.packagedepend", - "fields": { - "depname": "gmp", - "depvcmp": ">=4.2.2", - "pkg": 109 - } - }, - { - "pk": "185", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 110 - } - }, - { - "pk": "186", - "model": "main.packagedepend", - "fields": { - "depname": "ncurses", - "depvcmp": "", - "pkg": 110 - } - }, - { - "pk": "187", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 111 - } - }, - { - "pk": "188", - "model": "main.packagedepend", - "fields": { - "depname": "ndiswrapper-utils", - "depvcmp": "=1.52", - "pkg": 112 - } - }, - { - "pk": "189", - "model": "main.packagedepend", - "fields": { - "depname": "kernel26", - "depvcmp": ">=2.6.24.3-4", - "pkg": 112 - } - }, - { - "pk": "190", - "model": "main.packagedepend", - "fields": { - "depname": "kernel26", - "depvcmp": "<=2.6.25-0", - "pkg": 112 - } - }, - { - "pk": "191", - "model": "main.packagedepend", - "fields": { - "depname": "wireless_tools", - "depvcmp": "", - "pkg": 113 - } - }, - { - "pk": "192", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 113 - } - }, - { - "pk": "193", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 114 - } - }, - { - "pk": "194", - "model": "main.packagedepend", - "fields": { - "depname": "wireless_tools", - "depvcmp": "", - "pkg": 115 - } - }, - { - "pk": "195", - "model": "main.packagedepend", - "fields": { - "depname": "wpa_supplicant", - "depvcmp": "", - "pkg": 115 - } - }, - { - "pk": "196", - "model": "main.packagedepend", - "fields": { - "depname": "net-tools", - "depvcmp": "", - "pkg": 115 - } - }, - { - "pk": "197", - "model": "main.packagedepend", - "fields": { - "depname": "mktemp", - "depvcmp": "", - "pkg": 115 - } - }, - { - "pk": "198", - "model": "main.packagedepend", - "fields": { - "depname": "ncurses", - "depvcmp": "", - "pkg": 116 - } - }, - { - "pk": "199", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 117 - } - }, - { - "pk": "200", - "model": "main.packagedepend", - "fields": { - "depname": "tcp_wrappers", - "depvcmp": "", - "pkg": 117 - } - }, - { - "pk": "201", - "model": "main.packagedepend", - "fields": { - "depname": "e2fsprogs", - "depvcmp": "", - "pkg": 117 - } - }, - { - "pk": "202", - "model": "main.packagedepend", - "fields": { - "depname": "portmap", - "depvcmp": "", - "pkg": 117 - } - }, - { - "pk": "203", - "model": "main.packagedepend", - "fields": { - "depname": "nfsidmap", - "depvcmp": "", - "pkg": 117 - } - }, - { - "pk": "204", - "model": "main.packagedepend", - "fields": { - "depname": "libevent", - "depvcmp": ">=1.3e", - "pkg": 117 - } - }, - { - "pk": "205", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 118 - } - }, - { - "pk": "206", - "model": "main.packagedepend", - "fields": { - "depname": "libldap", - "depvcmp": "", - "pkg": 118 - } - }, - { - "pk": "207", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 119 - } - }, - { - "pk": "208", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 120 - } - }, - { - "pk": "209", - "model": "main.packagedepend", - "fields": { - "depname": "fuse", - "depvcmp": "", - "pkg": 120 - } - }, - { - "pk": "210", - "model": "main.packagedepend", - "fields": { - "depname": "e2fsprogs", - "depvcmp": "", - "pkg": 120 - } - }, - { - "pk": "211", - "model": "main.packagedepend", - "fields": { - "depname": "openssl", - "depvcmp": ">=0.9.8g", - "pkg": 121 - } - }, - { - "pk": "212", - "model": "main.packagedepend", - "fields": { - "depname": "zlib", - "depvcmp": "", - "pkg": 121 - } - }, - { - "pk": "213", - "model": "main.packagedepend", - "fields": { - "depname": "pam", - "depvcmp": "", - "pkg": 121 - } - }, - { - "pk": "214", - "model": "main.packagedepend", - "fields": { - "depname": "tcp_wrappers", - "depvcmp": "", - "pkg": 121 - } - }, - { - "pk": "215", - "model": "main.packagedepend", - "fields": { - "depname": "heimdal", - "depvcmp": "", - "pkg": 121 - } - }, - { - "pk": "216", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 122 - } - }, - { - "pk": "217", - "model": "main.packagedepend", - "fields": { - "depname": "iproute", - "depvcmp": "", - "pkg": 123 - } - }, - { - "pk": "218", - "model": "main.packagedepend", - "fields": { - "depname": "gmp", - "depvcmp": "", - "pkg": 123 - } - }, - { - "pk": "219", - "model": "main.packagedepend", - "fields": { - "depname": "perl", - "depvcmp": "", - "pkg": 123 - } - }, - { - "pk": "220", - "model": "main.packagedepend", - "fields": { - "depname": "openssl", - "depvcmp": "", - "pkg": 124 - } - }, - { - "pk": "221", - "model": "main.packagedepend", - "fields": { - "depname": "lzo2", - "depvcmp": "", - "pkg": 124 - } - }, - { - "pk": "222", - "model": "main.packagedepend", - "fields": { - "depname": "gcc-libs", - "depvcmp": "", - "pkg": 125 - } - }, - { - "pk": "223", - "model": "main.packagedepend", - "fields": { - "depname": "bash", - "depvcmp": "", - "pkg": 125 - } - }, - { - "pk": "224", - "model": "main.packagedepend", - "fields": { - "depname": "libarchive", - "depvcmp": ">=2.4.17", - "pkg": 125 - } - }, - { - "pk": "225", - "model": "main.packagedepend", - "fields": { - "depname": "libdownload", - "depvcmp": ">=1.3", - "pkg": 125 - } - }, - { - "pk": "226", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 126 - } - }, - { - "pk": "227", - "model": "main.packagedepend", - "fields": { - "depname": "db", - "depvcmp": ">=4.6", - "pkg": 126 - } - }, - { - "pk": "228", - "model": "main.packagedepend", - "fields": { - "depname": "cracklib", - "depvcmp": "", - "pkg": 126 - } - }, - { - "pk": "229", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 127 - } - }, - { - "pk": "230", - "model": "main.packagedepend", - "fields": { - "depname": "ed", - "depvcmp": "", - "pkg": 127 - } - }, - { - "pk": "231", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 128 - } - }, - { - "pk": "232", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 129 - } - }, - { - "pk": "233", - "model": "main.packagedepend", - "fields": { - "depname": "sysfsutils", - "depvcmp": "", - "pkg": 129 - } - }, - { - "pk": "234", - "model": "main.packagedepend", - "fields": { - "depname": "module-init-tools", - "depvcmp": ">=3.2pre9", - "pkg": 129 - } - }, - { - "pk": "235", - "model": "main.packagedepend", - "fields": { - "depname": "gcc-libs", - "depvcmp": "", - "pkg": 130 - } - }, - { - "pk": "236", - "model": "main.packagedepend", - "fields": { - "depname": "gdbm", - "depvcmp": "", - "pkg": 131 - } - }, - { - "pk": "237", - "model": "main.packagedepend", - "fields": { - "depname": "db", - "depvcmp": ">=4.6", - "pkg": 131 - } - }, - { - "pk": "238", - "model": "main.packagedepend", - "fields": { - "depname": "coreutils", - "depvcmp": "", - "pkg": 131 - } - }, - { - "pk": "239", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 131 - } - }, - { - "pk": "240", - "model": "main.packagedepend", - "fields": { - "depname": "sh", - "depvcmp": "", - "pkg": 131 - } - }, - { - "pk": "241", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 132 - } - }, - { - "pk": "242", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 133 - } - }, - { - "pk": "243", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 134 - } - }, - { - "pk": "244", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 135 - } - }, - { - "pk": "245", - "model": "main.packagedepend", - "fields": { - "depname": "libpcap", - "depvcmp": ">=0.9.8", - "pkg": 135 - } - }, - { - "pk": "246", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 136 - } - }, - { - "pk": "247", - "model": "main.packagedepend", - "fields": { - "depname": "ppp", - "depvcmp": "", - "pkg": 136 - } - }, - { - "pk": "248", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 137 - } - }, - { - "pk": "249", - "model": "main.packagedepend", - "fields": { - "depname": "ncurses", - "depvcmp": "", - "pkg": 137 - } - }, - { - "pk": "250", - "model": "main.packagedepend", - "fields": { - "depname": "perl", - "depvcmp": "", - "pkg": 137 - } - }, - { - "pk": "251", - "model": "main.packagedepend", - "fields": { - "depname": "ncurses", - "depvcmp": "", - "pkg": 138 - } - }, - { - "pk": "252", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 139 - } - }, - { - "pk": "253", - "model": "main.packagedepend", - "fields": { - "depname": "ncurses", - "depvcmp": "", - "pkg": 139 - } - }, - { - "pk": "254", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 140 - } - }, - { - "pk": "255", - "model": "main.packagedepend", - "fields": { - "depname": "ncurses", - "depvcmp": "", - "pkg": 140 - } - }, - { - "pk": "256", - "model": "main.packagedepend", - "fields": { - "depname": "e2fsprogs", - "depvcmp": "", - "pkg": 141 - } - }, - { - "pk": "257", - "model": "main.packagedepend", - "fields": { - "depname": "ppp", - "depvcmp": "", - "pkg": 142 - } - }, - { - "pk": "258", - "model": "main.packagedepend", - "fields": { - "depname": "kernel26", - "depvcmp": ">=2.6.24.3-4", - "pkg": 143 - } - }, - { - "pk": "259", - "model": "main.packagedepend", - "fields": { - "depname": "kernel26", - "depvcmp": "<=2.6.25-0", - "pkg": 143 - } - }, - { - "pk": "260", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 146 - } - }, - { - "pk": "261", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 147 - } - }, - { - "pk": "262", - "model": "main.packagedepend", - "fields": { - "depname": "pam", - "depvcmp": "", - "pkg": 148 - } - }, - { - "pk": "263", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 149 - } - }, - { - "pk": "264", - "model": "main.packagedepend", - "fields": { - "depname": "pam", - "depvcmp": "", - "pkg": 149 - } - }, - { - "pk": "265", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 150 - } - }, - { - "pk": "266", - "model": "main.packagedepend", - "fields": { - "depname": "logrotate", - "depvcmp": "", - "pkg": 151 - } - }, - { - "pk": "267", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 151 - } - }, - { - "pk": "268", - "model": "main.packagedepend", - "fields": { - "depname": "shadow", - "depvcmp": "", - "pkg": 152 - } - }, - { - "pk": "269", - "model": "main.packagedepend", - "fields": { - "depname": "util-linux", - "depvcmp": "", - "pkg": 152 - } - }, - { - "pk": "270", - "model": "main.packagedepend", - "fields": { - "depname": "coreutils", - "depvcmp": "", - "pkg": 152 - } - }, - { - "pk": "271", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 152 - } - }, - { - "pk": "272", - "model": "main.packagedepend", - "fields": { - "depname": "awk", - "depvcmp": "", - "pkg": 152 - } - }, - { - "pk": "273", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 153 - } - }, - { - "pk": "274", - "model": "main.packagedepend", - "fields": { - "depname": "bash", - "depvcmp": "", - "pkg": 153 - } - }, - { - "pk": "275", - "model": "main.packagedepend", - "fields": { - "depname": "bash", - "depvcmp": "", - "pkg": 154 - } - }, - { - "pk": "276", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 154 - } - }, - { - "pk": "277", - "model": "main.packagedepend", - "fields": { - "depname": "ncurses", - "depvcmp": "", - "pkg": 155 - } - }, - { - "pk": "278", - "model": "main.packagedepend", - "fields": { - "depname": "wireless_tools", - "depvcmp": "", - "pkg": 156 - } - }, - { - "pk": "279", - "model": "main.packagedepend", - "fields": { - "depname": "kernel26", - "depvcmp": ">=2.6.24.3-4", - "pkg": 156 - } - }, - { - "pk": "280", - "model": "main.packagedepend", - "fields": { - "depname": "kernel26", - "depvcmp": "<2.6.25", - "pkg": 156 - } - }, - { - "pk": "281", - "model": "main.packagedepend", - "fields": { - "depname": "tiacx-firmware", - "depvcmp": "", - "pkg": 156 - } - }, - { - "pk": "282", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 159 - } - }, - { - "pk": "283", - "model": "main.packagedepend", - "fields": { - "depname": "coreutils", - "depvcmp": "", - "pkg": 159 - } - }, - { - "pk": "284", - "model": "main.packagedepend", - "fields": { - "depname": "util-linux", - "depvcmp": "", - "pkg": 159 - } - }, - { - "pk": "285", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 160 - } - }, - { - "pk": "286", - "model": "main.packagedepend", - "fields": { - "depname": "libusb", - "depvcmp": "", - "pkg": 160 - } - }, - { - "pk": "287", - "model": "main.packagedepend", - "fields": { - "depname": "bash", - "depvcmp": "", - "pkg": 161 - } - }, - { - "pk": "288", - "model": "main.packagedepend", - "fields": { - "depname": "ncurses", - "depvcmp": "", - "pkg": 161 - } - }, - { - "pk": "289", - "model": "main.packagedepend", - "fields": { - "depname": "zlib", - "depvcmp": "", - "pkg": 161 - } - }, - { - "pk": "290", - "model": "main.packagedepend", - "fields": { - "depname": "e2fsprogs", - "depvcmp": "", - "pkg": 161 - } - }, - { - "pk": "291", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 162 - } - }, - { - "pk": "292", - "model": "main.packagedepend", - "fields": { - "depname": "ncurses", - "depvcmp": "", - "pkg": 162 - } - }, - { - "pk": "293", - "model": "main.packagedepend", - "fields": { - "depname": "coreutils", - "depvcmp": "", - "pkg": 162 - } - }, - { - "pk": "294", - "model": "main.packagedepend", - "fields": { - "depname": "libgcrypt", - "depvcmp": "", - "pkg": 163 - } - }, - { - "pk": "295", - "model": "main.packagedepend", - "fields": { - "depname": "openssl", - "depvcmp": "", - "pkg": 163 - } - }, - { - "pk": "296", - "model": "main.packagedepend", - "fields": { - "depname": "iproute", - "depvcmp": "", - "pkg": 163 - } - }, - { - "pk": "297", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 164 - } - }, - { - "pk": "298", - "model": "main.packagedepend", - "fields": { - "depname": "openssl", - "depvcmp": "", - "pkg": 164 - } - }, - { - "pk": "299", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 165 - } - }, - { - "pk": "300", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 166 - } - }, - { - "pk": "301", - "model": "main.packagedepend", - "fields": { - "depname": "kernel26", - "depvcmp": ">=2.6.24.3-4", - "pkg": 167 - } - }, - { - "pk": "302", - "model": "main.packagedepend", - "fields": { - "depname": "kernel26", - "depvcmp": "<=2.6.25-0", - "pkg": 167 - } - }, - { - "pk": "303", - "model": "main.packagedepend", - "fields": { - "depname": "wlan-ng26-utils", - "depvcmp": "", - "pkg": 167 - } - }, - { - "pk": "304", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 168 - } - }, - { - "pk": "305", - "model": "main.packagedepend", - "fields": { - "depname": "bash", - "depvcmp": "", - "pkg": 168 - } - }, - { - "pk": "306", - "model": "main.packagedepend", - "fields": { - "depname": "openssl", - "depvcmp": "", - "pkg": 169 - } - }, - { - "pk": "307", - "model": "main.packagedepend", - "fields": { - "depname": "e2fsprogs", - "depvcmp": "", - "pkg": 170 - } - }, - { - "pk": "308", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 171 - } - }, - { - "pk": "309", - "model": "main.packagedepend", - "fields": { - "depname": "tcp_wrappers", - "depvcmp": "", - "pkg": 171 - } - }, - { - "pk": "310", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 173 - } - }, - { - "pk": "311", - "model": "main.packagedepend", - "fields": { - "depname": "bash", - "depvcmp": "", - "pkg": 174 - } - }, - { - "pk": "312", - "model": "main.packagedepend", - "fields": { - "depname": "rsync", - "depvcmp": "", - "pkg": 174 - } - }, - { - "pk": "313", - "model": "main.packagedepend", - "fields": { - "depname": "attr", - "depvcmp": ">=2.4.41", - "pkg": 175 - } - }, - { - "pk": "314", - "model": "main.packagedepend", - "fields": { - "depname": "kernel26", - "depvcmp": ">=2.6.24.4-1", - "pkg": 176 - } - }, - { - "pk": "315", - "model": "main.packagedepend", - "fields": { - "depname": "kernel26", - "depvcmp": "<2.6.25", - "pkg": 176 - } - }, - { - "pk": "316", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 177 - } - }, - { - "pk": "317", - "model": "main.packagedepend", - "fields": { - "depname": "awk", - "depvcmp": "", - "pkg": 178 - } - }, - { - "pk": "318", - "model": "main.packagedepend", - "fields": { - "depname": "m4", - "depvcmp": "", - "pkg": 178 - } - }, - { - "pk": "319", - "model": "main.packagedepend", - "fields": { - "depname": "diffutils", - "depvcmp": "", - "pkg": 178 - } - }, - { - "pk": "320", - "model": "main.packagedepend", - "fields": { - "depname": "bash", - "depvcmp": "", - "pkg": 178 - } - }, - { - "pk": "321", - "model": "main.packagedepend", - "fields": { - "depname": "perl", - "depvcmp": "", - "pkg": 179 - } - }, - { - "pk": "322", - "model": "main.packagedepend", - "fields": { - "depname": "bash", - "depvcmp": "", - "pkg": 179 - } - }, - { - "pk": "323", - "model": "main.packagedepend", - "fields": { - "depname": "readline", - "depvcmp": ">=5.2", - "pkg": 180 - } - }, - { - "pk": "324", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 180 - } - }, - { - "pk": "325", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 181 - } - }, - { - "pk": "326", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 182 - } - }, - { - "pk": "327", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": ">=2.7", - "pkg": 183 - } - }, - { - "pk": "328", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 184 - } - }, - { - "pk": "329", - "model": "main.packagedepend", - "fields": { - "depname": "m4", - "depvcmp": "", - "pkg": 184 - } - }, - { - "pk": "330", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 185 - } - }, - { - "pk": "331", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 186 - } - }, - { - "pk": "332", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 187 - } - }, - { - "pk": "333", - "model": "main.packagedepend", - "fields": { - "depname": "bash", - "depvcmp": "", - "pkg": 187 - } - }, - { - "pk": "334", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": ">=2.7-7", - "pkg": 188 - } - }, - { - "pk": "335", - "model": "main.packagedepend", - "fields": { - "depname": "shadow", - "depvcmp": ">=4.0.18.2-2", - "pkg": 188 - } - }, - { - "pk": "336", - "model": "main.packagedepend", - "fields": { - "depname": "pam", - "depvcmp": ">=0.99.9.0-2", - "pkg": 188 - } - }, - { - "pk": "337", - "model": "main.packagedepend", - "fields": { - "depname": "acl", - "depvcmp": ">=2.2.45-2", - "pkg": 188 - } - }, - { - "pk": "338", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 189 - } - }, - { - "pk": "339", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 190 - } - }, - { - "pk": "340", - "model": "main.packagedepend", - "fields": { - "depname": "device-mapper", - "depvcmp": "", - "pkg": 191 - } - }, - { - "pk": "341", - "model": "main.packagedepend", - "fields": { - "depname": "libgcrypt", - "depvcmp": "", - "pkg": 191 - } - }, - { - "pk": "342", - "model": "main.packagedepend", - "fields": { - "depname": "popt", - "depvcmp": "", - "pkg": 191 - } - }, - { - "pk": "343", - "model": "main.packagedepend", - "fields": { - "depname": "e2fsprogs", - "depvcmp": "", - "pkg": 191 - } - }, - { - "pk": "344", - "model": "main.packagedepend", - "fields": { - "depname": "gcc-libs", - "depvcmp": "", - "pkg": 192 - } - }, - { - "pk": "345", - "model": "main.packagedepend", - "fields": { - "depname": "zlib", - "depvcmp": "", - "pkg": 192 - } - }, - { - "pk": "346", - "model": "main.packagedepend", - "fields": { - "depname": "openssl", - "depvcmp": "", - "pkg": 192 - } - }, - { - "pk": "347", - "model": "main.packagedepend", - "fields": { - "depname": "gcc-libs", - "depvcmp": "", - "pkg": 194 - } - }, - { - "pk": "348", - "model": "main.packagedepend", - "fields": { - "depname": "coreutils", - "depvcmp": "", - "pkg": 194 - } - }, - { - "pk": "349", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 195 - } - }, - { - "pk": "350", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 196 - } - }, - { - "pk": "351", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 197 - } - }, - { - "pk": "352", - "model": "main.packagedepend", - "fields": { - "depname": "ncurses", - "depvcmp": "", - "pkg": 198 - } - }, - { - "pk": "353", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 199 - } - }, - { - "pk": "354", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 200 - } - }, - { - "pk": "355", - "model": "main.packagedepend", - "fields": { - "depname": "device-mapper", - "depvcmp": "", - "pkg": 201 - } - }, - { - "pk": "356", - "model": "main.packagedepend", - "fields": { - "depname": "openssl", - "depvcmp": ">=0.9.8e", - "pkg": 202 - } - }, - { - "pk": "357", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 203 - } - }, - { - "pk": "358", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 204 - } - }, - { - "pk": "359", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 205 - } - }, - { - "pk": "360", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 206 - } - }, - { - "pk": "361", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 207 - } - }, - { - "pk": "362", - "model": "main.packagedepend", - "fields": { - "depname": "filesystem", - "depvcmp": "", - "pkg": 207 - } - }, - { - "pk": "363", - "model": "main.packagedepend", - "fields": { - "depname": "grep", - "depvcmp": "", - "pkg": 207 - } - }, - { - "pk": "364", - "model": "main.packagedepend", - "fields": { - "depname": "sed", - "depvcmp": "", - "pkg": 207 - } - }, - { - "pk": "365", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 208 - } - }, - { - "pk": "366", - "model": "main.packagedepend", - "fields": { - "depname": "zlib", - "depvcmp": "", - "pkg": 208 - } - }, - { - "pk": "367", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 210 - } - }, - { - "pk": "368", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 211 - } - }, - { - "pk": "369", - "model": "main.packagedepend", - "fields": { - "depname": "sh", - "depvcmp": "", - "pkg": 211 - } - }, - { - "pk": "370", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 212 - } - }, - { - "pk": "371", - "model": "main.packagedepend", - "fields": { - "depname": "bash", - "depvcmp": "", - "pkg": 213 - } - }, - { - "pk": "372", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 213 - } - }, - { - "pk": "373", - "model": "main.packagedepend", - "fields": { - "depname": "binutils", - "depvcmp": ">=2.18-3", - "pkg": 214 - } - }, - { - "pk": "374", - "model": "main.packagedepend", - "fields": { - "depname": "gcc-libs", - "depvcmp": ">=4.3.0", - "pkg": 214 - } - }, - { - "pk": "375", - "model": "main.packagedepend", - "fields": { - "depname": "mpfr", - "depvcmp": ">=2.3.1", - "pkg": 214 - } - }, - { - "pk": "376", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": ">=2.7", - "pkg": 215 - } - }, - { - "pk": "377", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 216 - } - }, - { - "pk": "378", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 217 - } - }, - { - "pk": "379", - "model": "main.packagedepend", - "fields": { - "depname": "gcc-libs", - "depvcmp": "", - "pkg": 218 - } - }, - { - "pk": "380", - "model": "main.packagedepend", - "fields": { - "depname": "acl", - "depvcmp": "", - "pkg": 218 - } - }, - { - "pk": "381", - "model": "main.packagedepend", - "fields": { - "depname": "pcre", - "depvcmp": ">=7.6-3", - "pkg": 219 - } - }, - { - "pk": "382", - "model": "main.packagedepend", - "fields": { - "depname": "sh", - "depvcmp": "", - "pkg": 220 - } - }, - { - "pk": "383", - "model": "main.packagedepend", - "fields": { - "depname": "kernel-headers", - "depvcmp": ">=2.6.24.3", - "pkg": 220 - } - }, - { - "pk": "384", - "model": "main.packagedepend", - "fields": { - "depname": "tzdata", - "depvcmp": "", - "pkg": 220 - } - }, - { - "pk": "385", - "model": "main.packagedepend", - "fields": { - "depname": "gcc-libs", - "depvcmp": "", - "pkg": 221 - } - }, - { - "pk": "386", - "model": "main.packagedepend", - "fields": { - "depname": "ncurses", - "depvcmp": "", - "pkg": 222 - } - }, - { - "pk": "387", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 223 - } - }, - { - "pk": "388", - "model": "main.packagedepend", - "fields": { - "depname": "pcre", - "depvcmp": "", - "pkg": 223 - } - }, - { - "pk": "389", - "model": "main.packagedepend", - "fields": { - "depname": "perl", - "depvcmp": "", - "pkg": 224 - } - }, - { - "pk": "390", - "model": "main.packagedepend", - "fields": { - "depname": "gcc-libs", - "depvcmp": "", - "pkg": 224 - } - }, - { - "pk": "391", - "model": "main.packagedepend", - "fields": { - "depname": "ncurses", - "depvcmp": "", - "pkg": 225 - } - }, - { - "pk": "392", - "model": "main.packagedepend", - "fields": { - "depname": "diffutils", - "depvcmp": "", - "pkg": 225 - } - }, - { - "pk": "393", - "model": "main.packagedepend", - "fields": { - "depname": "sed", - "depvcmp": "", - "pkg": 225 - } - }, - { - "pk": "394", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 226 - } - }, - { - "pk": "395", - "model": "main.packagedepend", - "fields": { - "depname": "bash", - "depvcmp": "", - "pkg": 226 - } - }, - { - "pk": "396", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 227 - } - }, - { - "pk": "397", - "model": "main.packagedepend", - "fields": { - "depname": "db", - "depvcmp": ">=4.6", - "pkg": 228 - } - }, - { - "pk": "398", - "model": "main.packagedepend", - "fields": { - "depname": "openssl", - "depvcmp": "", - "pkg": 228 - } - }, - { - "pk": "399", - "model": "main.packagedepend", - "fields": { - "depname": "e2fsprogs", - "depvcmp": "", - "pkg": 228 - } - }, - { - "pk": "400", - "model": "main.packagedepend", - "fields": { - "depname": "sh", - "depvcmp": "", - "pkg": 229 - } - }, - { - "pk": "401", - "model": "main.packagedepend", - "fields": { - "depname": "awk", - "depvcmp": "", - "pkg": 229 - } - }, - { - "pk": "402", - "model": "main.packagedepend", - "fields": { - "depname": "grep", - "depvcmp": "", - "pkg": 229 - } - }, - { - "pk": "403", - "model": "main.packagedepend", - "fields": { - "depname": "coreutils", - "depvcmp": "", - "pkg": 229 - } - }, - { - "pk": "404", - "model": "main.packagedepend", - "fields": { - "depname": "sed", - "depvcmp": "", - "pkg": 229 - } - }, - { - "pk": "405", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 230 - } - }, - { - "pk": "406", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 231 - } - }, - { - "pk": "407", - "model": "main.packagedepend", - "fields": { - "depname": "bash", - "depvcmp": "", - "pkg": 231 - } - }, - { - "pk": "408", - "model": "main.packagedepend", - "fields": { - "depname": "awk", - "depvcmp": "", - "pkg": 231 - } - }, - { - "pk": "409", - "model": "main.packagedepend", - "fields": { - "depname": "grep", - "depvcmp": "", - "pkg": 231 - } - }, - { - "pk": "410", - "model": "main.packagedepend", - "fields": { - "depname": "coreutils", - "depvcmp": "", - "pkg": 231 - } - }, - { - "pk": "411", - "model": "main.packagedepend", - "fields": { - "depname": "sed", - "depvcmp": "", - "pkg": 231 - } - }, - { - "pk": "412", - "model": "main.packagedepend", - "fields": { - "depname": "udev", - "depvcmp": ">=118", - "pkg": 231 - } - }, - { - "pk": "413", - "model": "main.packagedepend", - "fields": { - "depname": "net-tools", - "depvcmp": "", - "pkg": 231 - } - }, - { - "pk": "414", - "model": "main.packagedepend", - "fields": { - "depname": "ncurses", - "depvcmp": "", - "pkg": 231 - } - }, - { - "pk": "415", - "model": "main.packagedepend", - "fields": { - "depname": "db", - "depvcmp": ">=4.6", - "pkg": 232 - } - }, - { - "pk": "416", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 233 - } - }, - { - "pk": "417", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 234 - } - }, - { - "pk": "418", - "model": "main.packagedepend", - "fields": { - "depname": "wireless_tools", - "depvcmp": "", - "pkg": 235 - } - }, - { - "pk": "419", - "model": "main.packagedepend", - "fields": { - "depname": "wireless_tools", - "depvcmp": "", - "pkg": 236 - } - }, - { - "pk": "420", - "model": "main.packagedepend", - "fields": { - "depname": "wireless_tools", - "depvcmp": "", - "pkg": 237 - } - }, - { - "pk": "421", - "model": "main.packagedepend", - "fields": { - "depname": "kernel26", - "depvcmp": ">=2.6.24.3-4", - "pkg": 237 - } - }, - { - "pk": "422", - "model": "main.packagedepend", - "fields": { - "depname": "kernel26", - "depvcmp": "<=2.6.25-0", - "pkg": 237 - } - }, - { - "pk": "423", - "model": "main.packagedepend", - "fields": { - "depname": "ipw3945-ucode", - "depvcmp": "", - "pkg": 237 - } - }, - { - "pk": "424", - "model": "main.packagedepend", - "fields": { - "depname": "ipw3945d", - "depvcmp": "", - "pkg": 237 - } - }, - { - "pk": "425", - "model": "main.packagedepend", - "fields": { - "depname": "udev", - "depvcmp": "", - "pkg": 238 - } - }, - { - "pk": "426", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 239 - } - }, - { - "pk": "427", - "model": "main.packagedepend", - "fields": { - "depname": "ncurses", - "depvcmp": "", - "pkg": 240 - } - }, - { - "pk": "428", - "model": "main.packagedepend", - "fields": { - "depname": "e2fsprogs", - "depvcmp": "", - "pkg": 243 - } - }, - { - "pk": "429", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 244 - } - }, - { - "pk": "430", - "model": "main.packagedepend", - "fields": { - "depname": "coreutils", - "depvcmp": "", - "pkg": 246 - } - }, - { - "pk": "431", - "model": "main.packagedepend", - "fields": { - "depname": "module-init-tools", - "depvcmp": "", - "pkg": 246 - } - }, - { - "pk": "432", - "model": "main.packagedepend", - "fields": { - "depname": "mkinitcpio", - "depvcmp": ">=0.5.18", - "pkg": 246 - } - }, - { - "pk": "433", - "model": "main.packagedepend", - "fields": { - "depname": "klibc", - "depvcmp": ">=1.5-4", - "pkg": 248 - } - }, - { - "pk": "434", - "model": "main.packagedepend", - "fields": { - "depname": "klibc", - "depvcmp": ">=1.5-4", - "pkg": 249 - } - }, - { - "pk": "435", - "model": "main.packagedepend", - "fields": { - "depname": "kbd", - "depvcmp": "", - "pkg": 249 - } - }, - { - "pk": "436", - "model": "main.packagedepend", - "fields": { - "depname": "klibc", - "depvcmp": ">=1.5-4", - "pkg": 250 - } - }, - { - "pk": "437", - "model": "main.packagedepend", - "fields": { - "depname": "coreutils", - "depvcmp": "", - "pkg": 251 - } - }, - { - "pk": "438", - "model": "main.packagedepend", - "fields": { - "depname": "klibc", - "depvcmp": ">=1.5-4", - "pkg": 251 - } - }, - { - "pk": "439", - "model": "main.packagedepend", - "fields": { - "depname": "ncurses", - "depvcmp": "", - "pkg": 252 - } - }, - { - "pk": "440", - "model": "main.packagedepend", - "fields": { - "depname": "file", - "depvcmp": "", - "pkg": 252 - } - }, - { - "pk": "441", - "model": "main.packagedepend", - "fields": { - "depname": "zlib", - "depvcmp": "", - "pkg": 253 - } - }, - { - "pk": "442", - "model": "main.packagedepend", - "fields": { - "depname": "bzip2", - "depvcmp": "", - "pkg": 253 - } - }, - { - "pk": "443", - "model": "main.packagedepend", - "fields": { - "depname": "acl", - "depvcmp": "", - "pkg": 253 - } - }, - { - "pk": "444", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 254 - } - }, - { - "pk": "445", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 255 - } - }, - { - "pk": "446", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 256 - } - }, - { - "pk": "447", - "model": "main.packagedepend", - "fields": { - "depname": "libgpg-error", - "depvcmp": ">=1.6", - "pkg": 257 - } - }, - { - "pk": "448", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 258 - } - }, - { - "pk": "449", - "model": "main.packagedepend", - "fields": { - "depname": "libsasl", - "depvcmp": "", - "pkg": 259 - } - }, - { - "pk": "450", - "model": "main.packagedepend", - "fields": { - "depname": "openssl", - "depvcmp": ">=0.9.8f", - "pkg": 259 - } - }, - { - "pk": "451", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 260 - } - }, - { - "pk": "452", - "model": "main.packagedepend", - "fields": { - "depname": "db", - "depvcmp": ">=4.6", - "pkg": 261 - } - }, - { - "pk": "453", - "model": "main.packagedepend", - "fields": { - "depname": "sh", - "depvcmp": "", - "pkg": 262 - } - }, - { - "pk": "454", - "model": "main.packagedepend", - "fields": { - "depname": "gcc-libs", - "depvcmp": "", - "pkg": 263 - } - }, - { - "pk": "455", - "model": "main.packagedepend", - "fields": { - "depname": "device-mapper", - "depvcmp": "", - "pkg": 265 - } - }, - { - "pk": "456", - "model": "main.packagedepend", - "fields": { - "depname": "coreutils", - "depvcmp": "", - "pkg": 265 - } - }, - { - "pk": "457", - "model": "main.packagedepend", - "fields": { - "depname": "bzip2", - "depvcmp": "", - "pkg": 266 - } - }, - { - "pk": "458", - "model": "main.packagedepend", - "fields": { - "depname": "zlib", - "depvcmp": "", - "pkg": 266 - } - }, - { - "pk": "459", - "model": "main.packagedepend", - "fields": { - "depname": "openssl", - "depvcmp": "", - "pkg": 266 - } - }, - { - "pk": "460", - "model": "main.packagedepend", - "fields": { - "depname": "gpm", - "depvcmp": "", - "pkg": 266 - } - }, - { - "pk": "461", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 267 - } - }, - { - "pk": "462", - "model": "main.packagedepend", - "fields": { - "depname": "popt", - "depvcmp": "", - "pkg": 268 - } - }, - { - "pk": "463", - "model": "main.packagedepend", - "fields": { - "depname": "cron", - "depvcmp": "", - "pkg": 268 - } - }, - { - "pk": "464", - "model": "main.packagedepend", - "fields": { - "depname": "gzip", - "depvcmp": "", - "pkg": 268 - } - }, - { - "pk": "465", - "model": "main.packagedepend", - "fields": { - "depname": "device-mapper", - "depvcmp": ">=1.02.22", - "pkg": 269 - } - }, - { - "pk": "466", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 270 - } - }, - { - "pk": "467", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 271 - } - }, - { - "pk": "468", - "model": "main.packagedepend", - "fields": { - "depname": "bash", - "depvcmp": "", - "pkg": 271 - } - }, - { - "pk": "469", - "model": "main.packagedepend", - "fields": { - "depname": "madwifi-utils", - "depvcmp": "", - "pkg": 272 - } - }, - { - "pk": "470", - "model": "main.packagedepend", - "fields": { - "depname": "kernel26", - "depvcmp": ">=2.6.24.3-4", - "pkg": 272 - } - }, - { - "pk": "471", - "model": "main.packagedepend", - "fields": { - "depname": "kernel26", - "depvcmp": "<=2.6.25-0", - "pkg": 272 - } - }, - { - "pk": "472", - "model": "main.packagedepend", - "fields": { - "depname": "wireless_tools", - "depvcmp": "", - "pkg": 273 - } - }, - { - "pk": "473", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 274 - } - }, - { - "pk": "474", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 275 - } - }, - { - "pk": "475", - "model": "main.packagedepend", - "fields": { - "depname": "bash", - "depvcmp": "", - "pkg": 275 - } - }, - { - "pk": "476", - "model": "main.packagedepend", - "fields": { - "depname": "groff", - "depvcmp": "", - "pkg": 276 - } - }, - { - "pk": "477", - "model": "main.packagedepend", - "fields": { - "depname": "less", - "depvcmp": "", - "pkg": 276 - } - }, - { - "pk": "478", - "model": "main.packagedepend", - "fields": { - "depname": "gzip", - "depvcmp": "", - "pkg": 276 - } - }, - { - "pk": "479", - "model": "main.packagedepend", - "fields": { - "depname": "awk", - "depvcmp": "", - "pkg": 276 - } - }, - { - "pk": "480", - "model": "main.packagedepend", - "fields": { - "depname": "coreutils", - "depvcmp": "", - "pkg": 276 - } - }, - { - "pk": "481", - "model": "main.packagedepend", - "fields": { - "depname": "sh", - "depvcmp": "", - "pkg": 276 - } - }, - { - "pk": "482", - "model": "main.packagedepend", - "fields": { - "depname": "diffutils", - "depvcmp": "", - "pkg": 276 - } - }, - { - "pk": "483", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 278 - } - }, - { - "pk": "484", - "model": "main.packagedepend", - "fields": { - "depname": "klibc", - "depvcmp": ">=1.5-5", - "pkg": 279 - } - }, - { - "pk": "485", - "model": "main.packagedepend", - "fields": { - "depname": "klibc-extras", - "depvcmp": ">=2.4", - "pkg": 279 - } - }, - { - "pk": "486", - "model": "main.packagedepend", - "fields": { - "depname": "klibc-udev", - "depvcmp": ">=116-3", - "pkg": 279 - } - }, - { - "pk": "487", - "model": "main.packagedepend", - "fields": { - "depname": "gen-init-cpio", - "depvcmp": "", - "pkg": 279 - } - }, - { - "pk": "488", - "model": "main.packagedepend", - "fields": { - "depname": "klibc-module-init-tools", - "depvcmp": "", - "pkg": 279 - } - }, - { - "pk": "489", - "model": "main.packagedepend", - "fields": { - "depname": "coreutils", - "depvcmp": "", - "pkg": 279 - } - }, - { - "pk": "490", - "model": "main.packagedepend", - "fields": { - "depname": "bash", - "depvcmp": "", - "pkg": 279 - } - }, - { - "pk": "491", - "model": "main.packagedepend", - "fields": { - "depname": "klibc-kbd", - "depvcmp": "", - "pkg": 279 - } - }, - { - "pk": "492", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 280 - } - }, - { - "pk": "493", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 281 - } - }, - { - "pk": "494", - "model": "main.packagedepend", - "fields": { - "depname": "gmp", - "depvcmp": ">=4.2.2", - "pkg": 282 - } - }, - { - "pk": "495", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 283 - } - }, - { - "pk": "496", - "model": "main.packagedepend", - "fields": { - "depname": "ncurses", - "depvcmp": "", - "pkg": 283 - } - }, - { - "pk": "497", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 284 - } - }, - { - "pk": "498", - "model": "main.packagedepend", - "fields": { - "depname": "ndiswrapper-utils", - "depvcmp": "=1.52", - "pkg": 285 - } - }, - { - "pk": "499", - "model": "main.packagedepend", - "fields": { - "depname": "kernel26", - "depvcmp": ">=2.6.24.3-4", - "pkg": 285 - } - }, - { - "pk": "500", - "model": "main.packagedepend", - "fields": { - "depname": "kernel26", - "depvcmp": "<=2.6.25-0", - "pkg": 285 - } - }, - { - "pk": "501", - "model": "main.packagedepend", - "fields": { - "depname": "wireless_tools", - "depvcmp": "", - "pkg": 286 - } - }, - { - "pk": "502", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 286 - } - }, - { - "pk": "503", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 287 - } - }, - { - "pk": "504", - "model": "main.packagedepend", - "fields": { - "depname": "wireless_tools", - "depvcmp": "", - "pkg": 288 - } - }, - { - "pk": "505", - "model": "main.packagedepend", - "fields": { - "depname": "wpa_supplicant", - "depvcmp": "", - "pkg": 288 - } - }, - { - "pk": "506", - "model": "main.packagedepend", - "fields": { - "depname": "net-tools", - "depvcmp": "", - "pkg": 288 - } - }, - { - "pk": "507", - "model": "main.packagedepend", - "fields": { - "depname": "mktemp", - "depvcmp": "", - "pkg": 288 - } - }, - { - "pk": "508", - "model": "main.packagedepend", - "fields": { - "depname": "ncurses", - "depvcmp": "", - "pkg": 289 - } - }, - { - "pk": "509", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 290 - } - }, - { - "pk": "510", - "model": "main.packagedepend", - "fields": { - "depname": "tcp_wrappers", - "depvcmp": "", - "pkg": 290 - } - }, - { - "pk": "511", - "model": "main.packagedepend", - "fields": { - "depname": "e2fsprogs", - "depvcmp": "", - "pkg": 290 - } - }, - { - "pk": "512", - "model": "main.packagedepend", - "fields": { - "depname": "portmap", - "depvcmp": "", - "pkg": 290 - } - }, - { - "pk": "513", - "model": "main.packagedepend", - "fields": { - "depname": "nfsidmap", - "depvcmp": "", - "pkg": 290 - } - }, - { - "pk": "514", - "model": "main.packagedepend", - "fields": { - "depname": "libevent", - "depvcmp": ">=1.3e", - "pkg": 290 - } - }, - { - "pk": "515", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 291 - } - }, - { - "pk": "516", - "model": "main.packagedepend", - "fields": { - "depname": "libldap", - "depvcmp": "", - "pkg": 291 - } - }, - { - "pk": "517", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 292 - } - }, - { - "pk": "518", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 293 - } - }, - { - "pk": "519", - "model": "main.packagedepend", - "fields": { - "depname": "fuse", - "depvcmp": "", - "pkg": 293 - } - }, - { - "pk": "520", - "model": "main.packagedepend", - "fields": { - "depname": "e2fsprogs", - "depvcmp": "", - "pkg": 293 - } - }, - { - "pk": "521", - "model": "main.packagedepend", - "fields": { - "depname": "openssl", - "depvcmp": ">=0.9.8g", - "pkg": 294 - } - }, - { - "pk": "522", - "model": "main.packagedepend", - "fields": { - "depname": "zlib", - "depvcmp": "", - "pkg": 294 - } - }, - { - "pk": "523", - "model": "main.packagedepend", - "fields": { - "depname": "pam", - "depvcmp": "", - "pkg": 294 - } - }, - { - "pk": "524", - "model": "main.packagedepend", - "fields": { - "depname": "tcp_wrappers", - "depvcmp": "", - "pkg": 294 - } - }, - { - "pk": "525", - "model": "main.packagedepend", - "fields": { - "depname": "heimdal", - "depvcmp": "", - "pkg": 294 - } - }, - { - "pk": "526", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 295 - } - }, - { - "pk": "527", - "model": "main.packagedepend", - "fields": { - "depname": "iproute", - "depvcmp": "", - "pkg": 296 - } - }, - { - "pk": "528", - "model": "main.packagedepend", - "fields": { - "depname": "gmp", - "depvcmp": "", - "pkg": 296 - } - }, - { - "pk": "529", - "model": "main.packagedepend", - "fields": { - "depname": "perl", - "depvcmp": "", - "pkg": 296 - } - }, - { - "pk": "530", - "model": "main.packagedepend", - "fields": { - "depname": "openssl", - "depvcmp": "", - "pkg": 297 - } - }, - { - "pk": "531", - "model": "main.packagedepend", - "fields": { - "depname": "lzo2", - "depvcmp": "", - "pkg": 297 - } - }, - { - "pk": "532", - "model": "main.packagedepend", - "fields": { - "depname": "gcc-libs", - "depvcmp": "", - "pkg": 298 - } - }, - { - "pk": "533", - "model": "main.packagedepend", - "fields": { - "depname": "bash", - "depvcmp": "", - "pkg": 298 - } - }, - { - "pk": "534", - "model": "main.packagedepend", - "fields": { - "depname": "libarchive", - "depvcmp": ">=2.4.17", - "pkg": 298 - } - }, - { - "pk": "535", - "model": "main.packagedepend", - "fields": { - "depname": "libdownload", - "depvcmp": ">=1.3", - "pkg": 298 - } - }, - { - "pk": "536", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 299 - } - }, - { - "pk": "537", - "model": "main.packagedepend", - "fields": { - "depname": "db", - "depvcmp": ">=4.6", - "pkg": 299 - } - }, - { - "pk": "538", - "model": "main.packagedepend", - "fields": { - "depname": "cracklib", - "depvcmp": "", - "pkg": 299 - } - }, - { - "pk": "539", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 300 - } - }, - { - "pk": "540", - "model": "main.packagedepend", - "fields": { - "depname": "ed", - "depvcmp": "", - "pkg": 300 - } - }, - { - "pk": "541", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 301 - } - }, - { - "pk": "542", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 302 - } - }, - { - "pk": "543", - "model": "main.packagedepend", - "fields": { - "depname": "sysfsutils", - "depvcmp": "", - "pkg": 302 - } - }, - { - "pk": "544", - "model": "main.packagedepend", - "fields": { - "depname": "module-init-tools", - "depvcmp": ">=3.2pre9", - "pkg": 302 - } - }, - { - "pk": "545", - "model": "main.packagedepend", - "fields": { - "depname": "gcc-libs", - "depvcmp": "", - "pkg": 303 - } - }, - { - "pk": "546", - "model": "main.packagedepend", - "fields": { - "depname": "gdbm", - "depvcmp": "", - "pkg": 304 - } - }, - { - "pk": "547", - "model": "main.packagedepend", - "fields": { - "depname": "db", - "depvcmp": ">=4.6", - "pkg": 304 - } - }, - { - "pk": "548", - "model": "main.packagedepend", - "fields": { - "depname": "coreutils", - "depvcmp": "", - "pkg": 304 - } - }, - { - "pk": "549", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 304 - } - }, - { - "pk": "550", - "model": "main.packagedepend", - "fields": { - "depname": "sh", - "depvcmp": "", - "pkg": 304 - } - }, - { - "pk": "551", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 305 - } - }, - { - "pk": "552", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 306 - } - }, - { - "pk": "553", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 307 - } - }, - { - "pk": "554", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 308 - } - }, - { - "pk": "555", - "model": "main.packagedepend", - "fields": { - "depname": "libpcap", - "depvcmp": ">=0.9.8", - "pkg": 308 - } - }, - { - "pk": "556", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 309 - } - }, - { - "pk": "557", - "model": "main.packagedepend", - "fields": { - "depname": "ppp", - "depvcmp": "", - "pkg": 309 - } - }, - { - "pk": "558", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 310 - } - }, - { - "pk": "559", - "model": "main.packagedepend", - "fields": { - "depname": "ncurses", - "depvcmp": "", - "pkg": 310 - } - }, - { - "pk": "560", - "model": "main.packagedepend", - "fields": { - "depname": "perl", - "depvcmp": "", - "pkg": 310 - } - }, - { - "pk": "561", - "model": "main.packagedepend", - "fields": { - "depname": "ncurses", - "depvcmp": "", - "pkg": 311 - } - }, - { - "pk": "562", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 312 - } - }, - { - "pk": "563", - "model": "main.packagedepend", - "fields": { - "depname": "ncurses", - "depvcmp": "", - "pkg": 312 - } - }, - { - "pk": "564", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 313 - } - }, - { - "pk": "565", - "model": "main.packagedepend", - "fields": { - "depname": "ncurses", - "depvcmp": "", - "pkg": 313 - } - }, - { - "pk": "566", - "model": "main.packagedepend", - "fields": { - "depname": "e2fsprogs", - "depvcmp": "", - "pkg": 314 - } - }, - { - "pk": "567", - "model": "main.packagedepend", - "fields": { - "depname": "ppp", - "depvcmp": "", - "pkg": 315 - } - }, - { - "pk": "568", - "model": "main.packagedepend", - "fields": { - "depname": "kernel26", - "depvcmp": ">=2.6.24.3-4", - "pkg": 316 - } - }, - { - "pk": "569", - "model": "main.packagedepend", - "fields": { - "depname": "kernel26", - "depvcmp": "<=2.6.25-0", - "pkg": 316 - } - }, - { - "pk": "570", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 319 - } - }, - { - "pk": "571", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 320 - } - }, - { - "pk": "572", - "model": "main.packagedepend", - "fields": { - "depname": "pam", - "depvcmp": "", - "pkg": 321 - } - }, - { - "pk": "573", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 322 - } - }, - { - "pk": "574", - "model": "main.packagedepend", - "fields": { - "depname": "pam", - "depvcmp": "", - "pkg": 322 - } - }, - { - "pk": "575", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 323 - } - }, - { - "pk": "576", - "model": "main.packagedepend", - "fields": { - "depname": "logrotate", - "depvcmp": "", - "pkg": 324 - } - }, - { - "pk": "577", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 324 - } - }, - { - "pk": "578", - "model": "main.packagedepend", - "fields": { - "depname": "shadow", - "depvcmp": "", - "pkg": 325 - } - }, - { - "pk": "579", - "model": "main.packagedepend", - "fields": { - "depname": "util-linux", - "depvcmp": "", - "pkg": 325 - } - }, - { - "pk": "580", - "model": "main.packagedepend", - "fields": { - "depname": "coreutils", - "depvcmp": "", - "pkg": 325 - } - }, - { - "pk": "581", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 325 - } - }, - { - "pk": "582", - "model": "main.packagedepend", - "fields": { - "depname": "awk", - "depvcmp": "", - "pkg": 325 - } - }, - { - "pk": "583", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 326 - } - }, - { - "pk": "584", - "model": "main.packagedepend", - "fields": { - "depname": "bash", - "depvcmp": "", - "pkg": 326 - } - }, - { - "pk": "585", - "model": "main.packagedepend", - "fields": { - "depname": "bash", - "depvcmp": "", - "pkg": 327 - } - }, - { - "pk": "586", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 327 - } - }, - { - "pk": "587", - "model": "main.packagedepend", - "fields": { - "depname": "ncurses", - "depvcmp": "", - "pkg": 328 - } - }, - { - "pk": "588", - "model": "main.packagedepend", - "fields": { - "depname": "wireless_tools", - "depvcmp": "", - "pkg": 329 - } - }, - { - "pk": "589", - "model": "main.packagedepend", - "fields": { - "depname": "kernel26", - "depvcmp": ">=2.6.24.3-4", - "pkg": 329 - } - }, - { - "pk": "590", - "model": "main.packagedepend", - "fields": { - "depname": "kernel26", - "depvcmp": "<2.6.25", - "pkg": 329 - } - }, - { - "pk": "591", - "model": "main.packagedepend", - "fields": { - "depname": "tiacx-firmware", - "depvcmp": "", - "pkg": 329 - } - }, - { - "pk": "592", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 332 - } - }, - { - "pk": "593", - "model": "main.packagedepend", - "fields": { - "depname": "coreutils", - "depvcmp": "", - "pkg": 332 - } - }, - { - "pk": "594", - "model": "main.packagedepend", - "fields": { - "depname": "util-linux", - "depvcmp": "", - "pkg": 332 - } - }, - { - "pk": "595", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 333 - } - }, - { - "pk": "596", - "model": "main.packagedepend", - "fields": { - "depname": "libusb", - "depvcmp": "", - "pkg": 333 - } - }, - { - "pk": "597", - "model": "main.packagedepend", - "fields": { - "depname": "bash", - "depvcmp": "", - "pkg": 334 - } - }, - { - "pk": "598", - "model": "main.packagedepend", - "fields": { - "depname": "ncurses", - "depvcmp": "", - "pkg": 334 - } - }, - { - "pk": "599", - "model": "main.packagedepend", - "fields": { - "depname": "zlib", - "depvcmp": "", - "pkg": 334 - } - }, - { - "pk": "600", - "model": "main.packagedepend", - "fields": { - "depname": "e2fsprogs", - "depvcmp": "", - "pkg": 334 - } - }, - { - "pk": "601", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 335 - } - }, - { - "pk": "602", - "model": "main.packagedepend", - "fields": { - "depname": "ncurses", - "depvcmp": "", - "pkg": 335 - } - }, - { - "pk": "603", - "model": "main.packagedepend", - "fields": { - "depname": "coreutils", - "depvcmp": "", - "pkg": 335 - } - }, - { - "pk": "604", - "model": "main.packagedepend", - "fields": { - "depname": "libgcrypt", - "depvcmp": "", - "pkg": 336 - } - }, - { - "pk": "605", - "model": "main.packagedepend", - "fields": { - "depname": "openssl", - "depvcmp": "", - "pkg": 336 - } - }, - { - "pk": "606", - "model": "main.packagedepend", - "fields": { - "depname": "iproute", - "depvcmp": "", - "pkg": 336 - } - }, - { - "pk": "607", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 337 - } - }, - { - "pk": "608", - "model": "main.packagedepend", - "fields": { - "depname": "openssl", - "depvcmp": "", - "pkg": 337 - } - }, - { - "pk": "609", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 338 - } - }, - { - "pk": "610", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 339 - } - }, - { - "pk": "611", - "model": "main.packagedepend", - "fields": { - "depname": "kernel26", - "depvcmp": ">=2.6.24.3-4", - "pkg": 340 - } - }, - { - "pk": "612", - "model": "main.packagedepend", - "fields": { - "depname": "kernel26", - "depvcmp": "<=2.6.25-0", - "pkg": 340 - } - }, - { - "pk": "613", - "model": "main.packagedepend", - "fields": { - "depname": "wlan-ng26-utils", - "depvcmp": "", - "pkg": 340 - } - }, - { - "pk": "614", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 341 - } - }, - { - "pk": "615", - "model": "main.packagedepend", - "fields": { - "depname": "bash", - "depvcmp": "", - "pkg": 341 - } - }, - { - "pk": "616", - "model": "main.packagedepend", - "fields": { - "depname": "openssl", - "depvcmp": "", - "pkg": 342 - } - }, - { - "pk": "617", - "model": "main.packagedepend", - "fields": { - "depname": "e2fsprogs", - "depvcmp": "", - "pkg": 343 - } - }, - { - "pk": "618", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 344 - } - }, - { - "pk": "619", - "model": "main.packagedepend", - "fields": { - "depname": "tcp_wrappers", - "depvcmp": "", - "pkg": 344 - } - }, - { - "pk": "620", - "model": "main.packagedepend", - "fields": { - "depname": "glibc", - "depvcmp": "", - "pkg": 346 - } - } -] diff --git a/main/migrations/0038_add_depends_optional_description.py b/main/migrations/0038_add_depends_optional_description.py new file mode 100644 index 00000000..ab3b3381 --- /dev/null +++ b/main/migrations/0038_add_depends_optional_description.py @@ -0,0 +1,156 @@ +# encoding: utf-8 +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + +class Migration(SchemaMigration): + + def forwards(self, orm): + db.add_column('package_depends', 'optional', self.gf('django.db.models.fields.BooleanField')(default=False), keep_default=False) + db.add_column('package_depends', 'description', self.gf('django.db.models.fields.TextField')(null=True, blank=True), keep_default=False) + + def backwards(self, orm): + db.delete_column('package_depends', 'optional') + db.delete_column('package_depends', 'description') + + models = { + 'auth.group': { + 'Meta': {'object_name': 'Group'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'auth.user': { + 'Meta': {'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + 'contenttypes.contenttype': { + 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + }, + 'main.arch': { + 'Meta': {'ordering': "['name']", 'object_name': 'Arch', 'db_table': "'arches'"}, + 'agnostic': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}) + }, + 'main.donor': { + 'Meta': {'ordering': "['name']", 'object_name': 'Donor', 'db_table': "'donors'"}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), + 'visible': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'main.package': { + 'Meta': {'ordering': "('pkgname',)", 'object_name': 'Package', 'db_table': "'packages'"}, + 'arch': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'packages'", 'to': "orm['main.Arch']"}), + 'build_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}), + 'compressed_size': ('django.db.models.fields.BigIntegerField', [], {'null': 'True'}), + 'filename': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'files_last_update': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'flag_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'installed_size': ('django.db.models.fields.BigIntegerField', [], {'null': 'True'}), + 'last_update': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'license': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}), + 'packager': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True'}), + 'packager_str': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'pkgbase': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}), + 'pkgdesc': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}), + 'pkgname': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}), + 'pkgrel': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'pkgver': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'repo': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'packages'", 'to': "orm['main.Repo']"}), + 'url': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}) + }, + 'main.packagedepend': { + 'Meta': {'object_name': 'PackageDepend', 'db_table': "'package_depends'"}, + 'depname': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}), + 'depvcmp': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'optional': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'pkg': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['main.Package']"}) + }, + 'main.packagefile': { + 'Meta': {'object_name': 'PackageFile', 'db_table': "'package_files'"}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'path': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'pkg': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['main.Package']"}) + }, + 'main.repo': { + 'Meta': {'ordering': "['name']", 'object_name': 'Repo', 'db_table': "'repos'"}, + 'bugs_project': ('django.db.models.fields.SmallIntegerField', [], {'default': '1'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), + 'svn_root': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'testing': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) + }, + 'main.signoff': { + 'Meta': {'object_name': 'Signoff'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'packager': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}), + 'pkg': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['main.Package']"}), + 'pkgrel': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'pkgver': ('django.db.models.fields.CharField', [], {'max_length': '255'}) + }, + 'main.todolist': { + 'Meta': {'object_name': 'Todolist', 'db_table': "'todolists'"}, + 'creator': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}), + 'date_added': ('django.db.models.fields.DateField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}) + }, + 'main.todolistpkg': { + 'Meta': {'unique_together': "(('list', 'pkg'),)", 'object_name': 'TodolistPkg', 'db_table': "'todolist_pkgs'"}, + 'complete': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'list': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['main.Todolist']"}), + 'pkg': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['main.Package']"}) + }, + 'main.userprofile': { + 'Meta': {'object_name': 'UserProfile', 'db_table': "'user_profiles'"}, + 'alias': ('django.db.models.fields.CharField', [], {'max_length': '50'}), + 'allowed_repos': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.Repo']", 'symmetrical': 'False', 'blank': 'True'}), + 'favorite_distros': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'interests': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}), + 'languages': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}), + 'location': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}), + 'notify': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'occupation': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}), + 'other_contact': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'picture': ('django.db.models.fields.files.FileField', [], {'default': "'devs/silhouette.png'", 'max_length': '100'}), + 'public_email': ('django.db.models.fields.CharField', [], {'max_length': '50'}), + 'roles': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}), + 'time_zone': ('django.db.models.fields.CharField', [], {'default': "'UTC'", 'max_length': '100'}), + 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'userprofile'", 'unique': 'True', 'to': "orm['auth.User']"}), + 'website': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), + 'yob': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}) + } + } + + complete_apps = ['main'] diff --git a/main/migrations/0039_auto__del_field_package_license.py b/main/migrations/0039_auto__del_field_package_license.py new file mode 100644 index 00000000..2860bc47 --- /dev/null +++ b/main/migrations/0039_auto__del_field_package_license.py @@ -0,0 +1,157 @@ +# encoding: utf-8 +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + +class Migration(SchemaMigration): + + depends_on = ( + ('packages', '0005_move_license_data'), + ) + + def forwards(self, orm): + db.delete_column('packages', 'license') + + def backwards(self, orm): + db.add_column('packages', 'license', self.gf('django.db.models.fields.CharField')(max_length=255, null=True), keep_default=False) + + models = { + 'auth.group': { + 'Meta': {'object_name': 'Group'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'auth.user': { + 'Meta': {'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + 'contenttypes.contenttype': { + 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + }, + 'main.arch': { + 'Meta': {'ordering': "['name']", 'object_name': 'Arch', 'db_table': "'arches'"}, + 'agnostic': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}) + }, + 'main.donor': { + 'Meta': {'ordering': "['name']", 'object_name': 'Donor', 'db_table': "'donors'"}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), + 'visible': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'main.package': { + 'Meta': {'ordering': "('pkgname',)", 'object_name': 'Package', 'db_table': "'packages'"}, + 'arch': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'packages'", 'to': "orm['main.Arch']"}), + 'build_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}), + 'compressed_size': ('django.db.models.fields.BigIntegerField', [], {'null': 'True'}), + 'filename': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'files_last_update': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'flag_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'installed_size': ('django.db.models.fields.BigIntegerField', [], {'null': 'True'}), + 'last_update': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'packager': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True'}), + 'packager_str': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'pkgbase': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}), + 'pkgdesc': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}), + 'pkgname': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}), + 'pkgrel': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'pkgver': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'repo': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'packages'", 'to': "orm['main.Repo']"}), + 'url': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}) + }, + 'main.packagedepend': { + 'Meta': {'object_name': 'PackageDepend', 'db_table': "'package_depends'"}, + 'depname': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}), + 'depvcmp': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'optional': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'pkg': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['main.Package']"}) + }, + 'main.packagefile': { + 'Meta': {'object_name': 'PackageFile', 'db_table': "'package_files'"}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'path': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'pkg': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['main.Package']"}) + }, + 'main.repo': { + 'Meta': {'ordering': "['name']", 'object_name': 'Repo', 'db_table': "'repos'"}, + 'bugs_project': ('django.db.models.fields.SmallIntegerField', [], {'default': '1'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), + 'svn_root': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'testing': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) + }, + 'main.signoff': { + 'Meta': {'object_name': 'Signoff'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'packager': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}), + 'pkg': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['main.Package']"}), + 'pkgrel': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'pkgver': ('django.db.models.fields.CharField', [], {'max_length': '255'}) + }, + 'main.todolist': { + 'Meta': {'object_name': 'Todolist', 'db_table': "'todolists'"}, + 'creator': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}), + 'date_added': ('django.db.models.fields.DateField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}) + }, + 'main.todolistpkg': { + 'Meta': {'unique_together': "(('list', 'pkg'),)", 'object_name': 'TodolistPkg', 'db_table': "'todolist_pkgs'"}, + 'complete': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'list': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['main.Todolist']"}), + 'pkg': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['main.Package']"}) + }, + 'main.userprofile': { + 'Meta': {'object_name': 'UserProfile', 'db_table': "'user_profiles'"}, + 'alias': ('django.db.models.fields.CharField', [], {'max_length': '50'}), + 'allowed_repos': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.Repo']", 'symmetrical': 'False', 'blank': 'True'}), + 'favorite_distros': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'interests': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}), + 'languages': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}), + 'location': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}), + 'notify': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'occupation': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}), + 'other_contact': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'picture': ('django.db.models.fields.files.FileField', [], {'default': "'devs/silhouette.png'", 'max_length': '100'}), + 'public_email': ('django.db.models.fields.CharField', [], {'max_length': '50'}), + 'roles': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}), + 'time_zone': ('django.db.models.fields.CharField', [], {'default': "'UTC'", 'max_length': '100'}), + 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'userprofile'", 'unique': 'True', 'to': "orm['auth.User']"}), + 'website': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), + 'yob': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}) + } + } + + complete_apps = ['main'] diff --git a/main/migrations/0040_split_package_files.py b/main/migrations/0040_split_package_files.py new file mode 100644 index 00000000..42e96d01 --- /dev/null +++ b/main/migrations/0040_split_package_files.py @@ -0,0 +1,166 @@ +# encoding: utf-8 +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Adding field 'PackageFile.is_directory' + db.add_column('package_files', 'is_directory', self.gf('django.db.models.fields.BooleanField')(default=False), keep_default=True) + # Adding field 'PackageFile.directory' + db.add_column('package_files', 'directory', self.gf('django.db.models.fields.CharField')(default='', max_length=255), keep_default=False) + # Adding field 'PackageFile.filename' + db.add_column('package_files', 'filename', self.gf('django.db.models.fields.CharField')(max_length=255, null=True, blank=True), keep_default=False) + + def backwards(self, orm): + # Deleting field 'PackageFile.is_directory' + db.delete_column('package_files', 'is_directory') + # Deleting field 'PackageFile.directory' + db.delete_column('package_files', 'directory') + # Deleting field 'PackageFile.filename' + db.delete_column('package_files', 'filename') + + models = { + 'auth.group': { + 'Meta': {'object_name': 'Group'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'auth.user': { + 'Meta': {'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + 'contenttypes.contenttype': { + 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + }, + 'main.arch': { + 'Meta': {'ordering': "['name']", 'object_name': 'Arch', 'db_table': "'arches'"}, + 'agnostic': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}) + }, + 'main.donor': { + 'Meta': {'ordering': "['name']", 'object_name': 'Donor', 'db_table': "'donors'"}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), + 'visible': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'main.package': { + 'Meta': {'ordering': "('pkgname',)", 'object_name': 'Package', 'db_table': "'packages'"}, + 'arch': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'packages'", 'to': "orm['main.Arch']"}), + 'build_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}), + 'compressed_size': ('django.db.models.fields.BigIntegerField', [], {'null': 'True'}), + 'filename': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'files_last_update': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'flag_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'installed_size': ('django.db.models.fields.BigIntegerField', [], {'null': 'True'}), + 'last_update': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'packager': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True'}), + 'packager_str': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'pkgbase': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}), + 'pkgdesc': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}), + 'pkgname': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}), + 'pkgrel': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'pkgver': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'repo': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'packages'", 'to': "orm['main.Repo']"}), + 'url': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}) + }, + 'main.packagedepend': { + 'Meta': {'object_name': 'PackageDepend', 'db_table': "'package_depends'"}, + 'depname': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}), + 'depvcmp': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255'}), + 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'optional': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'pkg': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['main.Package']"}) + }, + 'main.packagefile': { + 'Meta': {'object_name': 'PackageFile', 'db_table': "'package_files'"}, + 'directory': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'filename': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_directory': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'path': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'pkg': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['main.Package']"}) + }, + 'main.repo': { + 'Meta': {'ordering': "['name']", 'object_name': 'Repo', 'db_table': "'repos'"}, + 'bugs_project': ('django.db.models.fields.SmallIntegerField', [], {'default': '1'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), + 'svn_root': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'testing': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) + }, + 'main.signoff': { + 'Meta': {'object_name': 'Signoff'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'packager': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}), + 'pkg': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['main.Package']"}), + 'pkgrel': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'pkgver': ('django.db.models.fields.CharField', [], {'max_length': '255'}) + }, + 'main.todolist': { + 'Meta': {'object_name': 'Todolist', 'db_table': "'todolists'"}, + 'creator': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}), + 'date_added': ('django.db.models.fields.DateField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}) + }, + 'main.todolistpkg': { + 'Meta': {'unique_together': "(('list', 'pkg'),)", 'object_name': 'TodolistPkg', 'db_table': "'todolist_pkgs'"}, + 'complete': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'list': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['main.Todolist']"}), + 'pkg': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['main.Package']"}) + }, + 'main.userprofile': { + 'Meta': {'object_name': 'UserProfile', 'db_table': "'user_profiles'"}, + 'alias': ('django.db.models.fields.CharField', [], {'max_length': '50'}), + 'allowed_repos': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.Repo']", 'symmetrical': 'False', 'blank': 'True'}), + 'favorite_distros': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'interests': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}), + 'languages': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}), + 'location': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}), + 'notify': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'occupation': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}), + 'other_contact': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'picture': ('django.db.models.fields.files.FileField', [], {'default': "'devs/silhouette.png'", 'max_length': '100'}), + 'public_email': ('django.db.models.fields.CharField', [], {'max_length': '50'}), + 'roles': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}), + 'time_zone': ('django.db.models.fields.CharField', [], {'default': "'UTC'", 'max_length': '100'}), + 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'userprofile'", 'unique': 'True', 'to': "orm['auth.User']"}), + 'website': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), + 'yob': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}) + } + } + + complete_apps = ['main'] diff --git a/main/migrations/0041_move_package_files_data.py b/main/migrations/0041_move_package_files_data.py new file mode 100644 index 00000000..31eecaa5 --- /dev/null +++ b/main/migrations/0041_move_package_files_data.py @@ -0,0 +1,186 @@ +# encoding: utf-8 +from south.db import db +from south.v2 import DataMigration +from django.db import models +from django.db.models import F + +class Migration(DataMigration): + + def forwards(self, orm): + # Handle the paths that are directories first + orm.PackageFile.objects.filter(path__endswith='/').update( + is_directory=True, directory=F('path')) + + if db.backend_name == 'mysql': + db.execute("UPDATE package_files " + "SET filename = SUBSTRING_INDEX(path, '/', -1), " + "directory = SUBSTRING(path, 1, LENGTH(path) - INSTR(REVERSE(path), '/') + 1) " + "WHERE is_directory = 0") + elif db.backend_name == 'postgresql': + db.execute("UPDATE package_files " + "SET filename = substring(filename, '.*/(.*?)$'), " + "directory = substring(filename, '.*/') " + "WHERE is_directory = 0") + else: + # Sucks that we can't always do this in one query at the DB level... + files = orm.PackageFile.objects.filter(is_directory=False) + for f in files: + parts = f.path.rsplit('/', 1) + db.execute("UPDATE package_files " + "SET filename = %s, " + "directory = %s " + "WHERE id = %s", + (parts[1], parts[0] + '/', f.id)) + # We could do this, but then Django takes forever to generate + # basically the same query for every row. + #f.filename = parts[1] + #f.directory = parts[0] + '/' + #f.save() + + def backwards(self, orm): + orm.PackageFile.objects.all().update(is_directory=False, + directory='', filename=None) + + + models = { + 'auth.group': { + 'Meta': {'object_name': 'Group'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'auth.user': { + 'Meta': {'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + 'contenttypes.contenttype': { + 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + }, + 'main.arch': { + 'Meta': {'ordering': "['name']", 'object_name': 'Arch', 'db_table': "'arches'"}, + 'agnostic': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}) + }, + 'main.donor': { + 'Meta': {'ordering': "['name']", 'object_name': 'Donor', 'db_table': "'donors'"}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), + 'visible': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'main.package': { + 'Meta': {'ordering': "('pkgname',)", 'object_name': 'Package', 'db_table': "'packages'"}, + 'arch': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'packages'", 'to': "orm['main.Arch']"}), + 'build_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}), + 'compressed_size': ('django.db.models.fields.BigIntegerField', [], {'null': 'True'}), + 'filename': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'files_last_update': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'flag_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'installed_size': ('django.db.models.fields.BigIntegerField', [], {'null': 'True'}), + 'last_update': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'packager': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True'}), + 'packager_str': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'pkgbase': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}), + 'pkgdesc': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}), + 'pkgname': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}), + 'pkgrel': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'pkgver': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'repo': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'packages'", 'to': "orm['main.Repo']"}), + 'url': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}) + }, + 'main.packagedepend': { + 'Meta': {'object_name': 'PackageDepend', 'db_table': "'package_depends'"}, + 'depname': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}), + 'depvcmp': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255'}), + 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'optional': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'pkg': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['main.Package']"}) + }, + 'main.packagefile': { + 'Meta': {'object_name': 'PackageFile', 'db_table': "'package_files'"}, + 'directory': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'filename': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_directory': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'path': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'pkg': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['main.Package']"}) + }, + 'main.repo': { + 'Meta': {'ordering': "['name']", 'object_name': 'Repo', 'db_table': "'repos'"}, + 'bugs_project': ('django.db.models.fields.SmallIntegerField', [], {'default': '1'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), + 'svn_root': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'testing': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) + }, + 'main.signoff': { + 'Meta': {'object_name': 'Signoff'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'packager': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}), + 'pkg': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['main.Package']"}), + 'pkgrel': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'pkgver': ('django.db.models.fields.CharField', [], {'max_length': '255'}) + }, + 'main.todolist': { + 'Meta': {'object_name': 'Todolist', 'db_table': "'todolists'"}, + 'creator': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}), + 'date_added': ('django.db.models.fields.DateField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}) + }, + 'main.todolistpkg': { + 'Meta': {'unique_together': "(('list', 'pkg'),)", 'object_name': 'TodolistPkg', 'db_table': "'todolist_pkgs'"}, + 'complete': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'list': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['main.Todolist']"}), + 'pkg': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['main.Package']"}) + }, + 'main.userprofile': { + 'Meta': {'object_name': 'UserProfile', 'db_table': "'user_profiles'"}, + 'alias': ('django.db.models.fields.CharField', [], {'max_length': '50'}), + 'allowed_repos': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.Repo']", 'symmetrical': 'False', 'blank': 'True'}), + 'favorite_distros': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'interests': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}), + 'languages': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}), + 'location': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}), + 'notify': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'occupation': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}), + 'other_contact': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'picture': ('django.db.models.fields.files.FileField', [], {'default': "'devs/silhouette.png'", 'max_length': '100'}), + 'public_email': ('django.db.models.fields.CharField', [], {'max_length': '50'}), + 'roles': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}), + 'time_zone': ('django.db.models.fields.CharField', [], {'default': "'UTC'", 'max_length': '100'}), + 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'userprofile'", 'unique': 'True', 'to': "orm['auth.User']"}), + 'website': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), + 'yob': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}) + } + } + + complete_apps = ['main'] diff --git a/main/migrations/0042_auto__del_field_packagefile_path.py b/main/migrations/0042_auto__del_field_packagefile_path.py new file mode 100644 index 00000000..837a6a7f --- /dev/null +++ b/main/migrations/0042_auto__del_field_packagefile_path.py @@ -0,0 +1,158 @@ +# encoding: utf-8 +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Deleting field 'PackageFile.path' + db.delete_column('package_files', 'path') + + def backwards(self, orm): + # Adding field 'PackageFile.path' + db.add_column('package_files', 'path', self.gf('django.db.models.fields.CharField')(default='', max_length=255), keep_default=False) + + + models = { + 'auth.group': { + 'Meta': {'object_name': 'Group'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'auth.user': { + 'Meta': {'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + 'contenttypes.contenttype': { + 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + }, + 'main.arch': { + 'Meta': {'ordering': "['name']", 'object_name': 'Arch', 'db_table': "'arches'"}, + 'agnostic': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}) + }, + 'main.donor': { + 'Meta': {'ordering': "['name']", 'object_name': 'Donor', 'db_table': "'donors'"}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), + 'visible': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'main.package': { + 'Meta': {'ordering': "('pkgname',)", 'object_name': 'Package', 'db_table': "'packages'"}, + 'arch': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'packages'", 'to': "orm['main.Arch']"}), + 'build_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}), + 'compressed_size': ('django.db.models.fields.BigIntegerField', [], {'null': 'True'}), + 'filename': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'files_last_update': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'flag_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'installed_size': ('django.db.models.fields.BigIntegerField', [], {'null': 'True'}), + 'last_update': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'packager': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True'}), + 'packager_str': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'pkgbase': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}), + 'pkgdesc': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}), + 'pkgname': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}), + 'pkgrel': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'pkgver': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'repo': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'packages'", 'to': "orm['main.Repo']"}), + 'url': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}) + }, + 'main.packagedepend': { + 'Meta': {'object_name': 'PackageDepend', 'db_table': "'package_depends'"}, + 'depname': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}), + 'depvcmp': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255'}), + 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'optional': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'pkg': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['main.Package']"}) + }, + 'main.packagefile': { + 'Meta': {'object_name': 'PackageFile', 'db_table': "'package_files'"}, + 'directory': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'filename': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_directory': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'pkg': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['main.Package']"}) + }, + 'main.repo': { + 'Meta': {'ordering': "['name']", 'object_name': 'Repo', 'db_table': "'repos'"}, + 'bugs_project': ('django.db.models.fields.SmallIntegerField', [], {'default': '1'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), + 'svn_root': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'testing': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) + }, + 'main.signoff': { + 'Meta': {'object_name': 'Signoff'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'packager': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}), + 'pkg': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['main.Package']"}), + 'pkgrel': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'pkgver': ('django.db.models.fields.CharField', [], {'max_length': '255'}) + }, + 'main.todolist': { + 'Meta': {'object_name': 'Todolist', 'db_table': "'todolists'"}, + 'creator': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}), + 'date_added': ('django.db.models.fields.DateField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}) + }, + 'main.todolistpkg': { + 'Meta': {'unique_together': "(('list', 'pkg'),)", 'object_name': 'TodolistPkg', 'db_table': "'todolist_pkgs'"}, + 'complete': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'list': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['main.Todolist']"}), + 'pkg': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['main.Package']"}) + }, + 'main.userprofile': { + 'Meta': {'object_name': 'UserProfile', 'db_table': "'user_profiles'"}, + 'alias': ('django.db.models.fields.CharField', [], {'max_length': '50'}), + 'allowed_repos': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.Repo']", 'symmetrical': 'False', 'blank': 'True'}), + 'favorite_distros': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'interests': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}), + 'languages': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}), + 'location': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}), + 'notify': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'occupation': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}), + 'other_contact': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'picture': ('django.db.models.fields.files.FileField', [], {'default': "'devs/silhouette.png'", 'max_length': '100'}), + 'public_email': ('django.db.models.fields.CharField', [], {'max_length': '50'}), + 'roles': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}), + 'time_zone': ('django.db.models.fields.CharField', [], {'default': "'UTC'", 'max_length': '100'}), + 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'userprofile'", 'unique': 'True', 'to': "orm['auth.User']"}), + 'website': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), + 'yob': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}) + } + } + + complete_apps = ['main'] diff --git a/main/models.py b/main/models.py index ff2ecf02..a7cc2335 100644 --- a/main/models.py +++ b/main/models.py @@ -7,7 +7,6 @@ from packages.models import PackageRelation from itertools import groupby import pytz -from operator import attrgetter class UserProfile(models.Model): notify = models.BooleanField( @@ -117,7 +116,6 @@ class Package(models.Model): build_date = models.DateTimeField(null=True) last_update = models.DateTimeField(null=True, blank=True) files_last_update = models.DateTimeField(null=True, blank=True) - license = models.CharField(max_length=255, null=True) packager_str = models.CharField(max_length=255) packager = models.ForeignKey(User, null=True) flag_date = models.DateTimeField(null=True) @@ -174,10 +172,15 @@ class Package(models.Model): list slim by including the corresponding package in the same testing category as this package if that check makes sense. """ - requiredby = Package.objects.select_related('arch', 'repo').filter( - packagedepend__depname=self.pkgname, - arch__in=self.applicable_arches() - ).distinct().order_by('pkgname') + requiredby = PackageDepend.objects.select_related('pkg', + 'pkg__arch', 'pkg__repo').filter( + pkg__arch__in=self.applicable_arches(), + depname=self.pkgname).order_by( + 'pkg__pkgname', 'pkg__id') + # sort out duplicate packages; this happens if something has a double + # versioned dep such as a kernel module + requiredby = [list(vals)[0] for k, vals in + groupby(requiredby, lambda x: x.pkg.id)] # find another package by this name in the opposite testing setup if not Package.objects.filter(pkgname=self.pkgname, @@ -190,14 +193,15 @@ class Package(models.Model): # for each unique package name, try to screen our package list down to # those packages in the same testing category (yes or no) iff there is # a package in the same testing category. - for name, pkgs in groupby(requiredby, attrgetter('pkgname')): - pkgs = list(pkgs) - pkg = pkgs[0] - if len(pkgs) > 1: - pkgs = [p for p in pkgs if p.repo.testing == self.repo.testing] - if len(pkgs) > 0: - pkg = pkgs[0] - trimmed.append(pkg) + for name, dep_pkgs in groupby(requiredby, lambda x: x.pkg.pkgname): + dep_pkgs = list(dep_pkgs) + dep = dep_pkgs[0] + if len(dep_pkgs) > 1: + dep_pkgs = [d for d in dep_pkgs + if d.pkg.repo.testing == self.repo.testing] + if len(dep_pkgs) > 0: + dep = dep_pkgs[0] + trimmed.append(dep) return trimmed @cache_function(300) @@ -210,7 +214,7 @@ class Package(models.Model): """ deps = [] # TODO: we can use list comprehension and an 'in' query to make this more effective - for dep in self.packagedepend_set.order_by('depname'): + for dep in self.packagedepend_set.order_by('optional', 'depname'): pkgs = Package.objects.select_related('arch', 'repo').filter( pkgname=dep.depname) if not self.arch.agnostic: @@ -260,7 +264,7 @@ class Package(models.Model): repo.testing flag. For any non-split packages, the return value will be an empty list. """ - return Package.objects.filter(arch__in=self.applicable_arches, + return Package.objects.filter(arch__in=self.applicable_arches(), repo__testing=self.repo.testing, pkgbase=self.pkgbase).exclude(id=self.id) def get_svn_link(self, svnpath): @@ -309,15 +313,27 @@ class Signoff(models.Model): packager = models.ForeignKey(User) class PackageFile(models.Model): - pkg = models.ForeignKey('Package') - path = models.CharField(max_length=255) + pkg = models.ForeignKey(Package) + is_directory = models.BooleanField(default=False) + directory = models.CharField(max_length=255) + filename = models.CharField(max_length=255, null=True, blank=True) + + def __unicode__(self): + return "%s%s" % (self.directory, self.filename or '') + class Meta: db_table = 'package_files' class PackageDepend(models.Model): - pkg = models.ForeignKey('Package') - depname = models.CharField(db_index=True, max_length=255) - depvcmp = models.CharField(max_length=255) + pkg = models.ForeignKey(Package) + depname = models.CharField(max_length=255, db_index=True) + depvcmp = models.CharField(max_length=255, default='') + optional = models.BooleanField(default=False) + description = models.TextField(null=True, blank=True) + + def __unicode__(self): + return "%s%s" % (self.depname, self.depvcmp) + class Meta: db_table = 'package_depends' @@ -349,8 +365,8 @@ class Todolist(models.Model): return '/todo/%i/' % self.id class TodolistPkg(models.Model): - list = models.ForeignKey('Todolist') - pkg = models.ForeignKey('Package') + list = models.ForeignKey(Todolist) + pkg = models.ForeignKey(Package) complete = models.BooleanField(default=False) class Meta: db_table = 'todolist_pkgs' diff --git a/media/archweb.css b/media/archweb.css index a99dab68..6ae720c1 100644 --- a/media/archweb.css +++ b/media/archweb.css @@ -1,269 +1,273 @@ -/*
- * ARCH LINUX DJANGO (MAIN SITE)
- *
- * Font sizing based on 16px browser defaults (use em):
- * 14px = 0.875em
- * 13px = 0.812em
- * 12px = 0.75em
- * 11px = 0.6875em
- *
- */
-
-/* import the global navbar stylesheet */
-@import url('archnavbar/archnavbar.css');
-
-/* simple reset */
-* { margin: 0; padding: 0; line-height: 1.4; }
-
-/* general styling */
-body { min-width: 650px; background: #f6f7fc; color: #222; font: normal 100% sans-serif; text-align: center; }
-p { margin: .33em 0 1em; }
-ol, ul { margin-bottom: 1em; padding-left: 2em; }
-ul { list-style: square; }
-code { font: 1.2em monospace; background: #ffa; padding: 0.15em 0.25em; }
-pre { font: 1.2em monospace; border: 1px solid #bdb; background: #dfd; padding: 0.5em; margin: 0.25em 2em; }
-blockquote { margin: 1.5em 2em; }
-input { vertical-align: middle; }
-select[multiple] { padding-top: 1px; padding-bottom: 1px; }
-select[multiple] option { padding-left: 0.3em; padding-right: 0.5em; }
-input[type=submit] { padding-left: 0.6em; padding-right: 0.6em; }
-.clear { clear: both; }
-hr { border: none; border-top: 1px solid #888; }
-img { border: 0; }
-
-/* scale fonts down to a sane default (16 * .812 = 13px) */
-#content { font-size: 0.812em; }
-
-/* link style */
-a { text-decoration: none; }
-a:link, th a:visited { color: #07b; }
-a:visited { color: #666; }
-a:hover { text-decoration: underline; color: #666; }
-a:active { color: #e90; }
-
-/* headings */
-h2 { font-size: 1.5em; margin-bottom: 0.5em; border-bottom: 1px solid #888; }
-h3 { font-size: 1.25em; margin-top: 1em; }
-h4 { font-size: 1.15em; margin-top: 1em; }
-h5 { font-size: 1em; margin-top: 1em; }
-
-/* general layout */
-div#content { width: 95%; margin: 0 auto; text-align: left; }
-div#content-left-wrapper { float: left; width: 100%; } /* req to keep content above sidebar in source code */
-div#content-left { margin: 0 340px 0 0; }
-div#content-right { float: left; width: 300px; margin-left: -300px; }
-div.box { margin-bottom: 1.5em; padding: 0.65em; background: #ecedf5; border: 1px solid #bbbedd; }
-div#footer { clear: both; margin: 2em 0 1em; }
-div#footer p { margin: 0; text-align: center; font-size: 0.85em; }
-
-/* alignment */
-div.center, table.center, img.center { width: auto; margin-left: auto; margin-right: auto; }
-p.center, td.center, th.center { text-align: center; }
-
-/* table generics */
-table { width: 100%; border-collapse: collapse; }
-table .wrap { white-space: normal; }
-th, td { white-space: nowrap; text-align: left; }
-th { vertical-align: middle; font-weight: bold; }
-td { vertical-align: top; }
-
-/* table pretty styles */
-table.pretty1 { width: auto; margin-top: 0.25em; margin-bottom: 0.5em; border-collapse: collapse; border: 1px solid #bbbedd; }
-table.pretty1 th { padding: 0.35em; background: #e4e7ff; border: 1px solid #bbbedd; }
-table.pretty1 td { padding: 0.35em; border: 1px dotted #bbbedd; }
-table.pretty2 { width: auto; margin-top: 0.25em; margin-bottom: 0.5em; border-collapse: collapse; border: 1px solid #bbb; }
-table.pretty2 th { padding: 0.35em; background: #eee; border: 1px solid #bbb; }
-table.pretty2 td { padding: 0.35em; border: 1px dotted #bbb; }
-
-/* forms and input styling */
-form p { margin: 0.5em 0; }
-fieldset { border: 0; }
-label { width: 12em; vertical-align: top; display: inline-block; font-weight: bold; }
-input[type=text], input[type=password], textarea { padding: 0.10em; }
-form.general-form label, form.general-form .form-help { width: 10em; vertical-align: top; display: inline-block; }
-form.general-form input[type=text], form.general-form textarea { width: 45%; }
-
-/* archdev navbar */
-div#archdev-navbar { margin: 1.5em 0; }
-div#archdev-navbar ul { list-style: none; margin: -0.5em 0; padding: 0; }
-div#archdev-navbar li { display: inline; margin: 0; padding: 0; font-size: 0.9em; }
-div#archdev-navbar li a { padding: 0 0.5em; color: #07b; }
-
-/* error/info messages (x pkg is already flagged out-of-date, etc) */
-#sys-message { width: 35em; text-align: center; margin: 1em auto; padding: 0.5em; background: #fff; border: 1px solid #f00; }
-#sys-message p { margin: 0; }
-
-ul.errorlist { color: red; }
-
-/*
- * PAGE SPECIFIC STYLES
- */
-
-/* home: introduction */
-#intro p.readmore { margin: -0.5em 0 0 0; font-size: .9em; text-align: right; }
-
-/* home: news */
-#news { margin-top: 1.5em; }
-#news h3 { border-bottom: 1px solid #888; }
-#news div { margin-bottom: 1em; }
-#news div p { margin-bottom: 0.5em; }
-#news .more { font-weight: normal; }
-#news .rss-icon { float: right; margin: -1.6em 0.4em 0 0; }
-#news h4 { font-size: 1em; margin-top: 1.5em; border-bottom: 1px dotted #bbb; }
-#news .timestamp { float: right; font-size: 0.85em; margin: -1.8em 0.5em 0 0; }
-
-/* home: pkgsearch box */
-#pkgsearch { padding: 1em 0.75em; background: #787DAB; color: #fff; border: 1px solid #3c47ab; }
-#pkgsearch label { width: auto; padding: 0.1em 0; }
-#pkgsearch input { width: 10em; float: right; font-size: 1em; color: #000; background: #fff; border: 1px solid #3c47ab; }
-
-/* home: recent pkg updates */
-#pkg-updates h3 { margin: 0 0 0.3em; }
-#pkg-updates .more { font-weight: normal; }
-#pkg-updates .rss-icon { float: right; margin: -2em 0 0 0; }
-#pkg-updates table { margin: 0; }
-#pkg-updates td.pkg-name { white-space: normal; }
-#pkg-updates td.pkg-arch { text-align: right; }
-#pkg-updates span.testing, #pkg-updates span.community-testing, span.multilib-testing { font-style: italic; }
-
-/* home: sidebar navigation */
-div#nav-sidebar ul { list-style: none; margin: 0.5em 0 0.5em 1em; padding: 0; }
-
-/* home: sponsor banners */
-div#arch-sponsors img { padding: 0.3em 0; }
-
-/* home: sidebar components (navlist, sponsors, pkgsearch, etc) */
-div.widget { margin-bottom: 1.5em; }
-
-/* feeds page */
-#rss-feeds .rss { padding-right: 20px; background: url(rss.png) top right no-repeat; }
-
-/* artwork: logo images */
-#artwork img.inverted { background: #333; padding: 0; }
-#artwork div.imagelist img { display: inline; margin: 0.75em; }
-
-/* news: article list */
-.news-nav { float: right; margin-top: -2.2em; }
-.news-nav .prev, .news-nav .next { margin-left: 1em; margin-right: 1em; }
-
-/* news: article pages */
-div.news-article .article-info { margin: 0; color: #999; }
-
-/* news: add/edit article */
-form#newsform { width: 60em; }
-form#newsform input[type=text], form#newsform textarea { width: 75%; }
-
-/* donate: donor list */
-div#donor-list ul { width: 100%; }
-/* max 4 columns, but possibly fewer if screen size doesn't allow for more */
-div#donor-list li { float: left; width: 25%; min-width: 20em; }
-
-/* download page */
-#arch-downloads h3 { border-bottom: 1px dotted #aaa; }
-table#download-torrents .cpu-arch { text-align: center; }
-table#download-mirrors { width: auto; margin-bottom: 1em; }
-table#download-mirrors td.mirror-country { padding-top: 1em; }
-table#download-mirrors td.mirror-server { padding-right: 1em; }
-table#download-mirrors a { display: block; float: right; width: 4em; }
-
-/* pkglists/devlists */
-table.results { font-size: 0.846em; border-top: 1px dotted #999; border-bottom: 1px dotted #999; }
-table.results th { padding: 0.5em 1em 0.25em 0.25em; border-bottom: 1px solid #999; white-space: nowrap; background-color:#fff; }
-table.results td { padding: .3em 1em .3em 3px; }
-table.results tr.odd { background: #fff; }
-table.results tr.even { background: #e4e7ff; }
-/* additional styles for JS sorting */
-table.results th.header { padding-right: 20px; background-image: url(nosort.gif); background-repeat: no-repeat; background-position: center right; cursor: pointer; }
-table.results th.headerSortDown { background-color: #e4e7ff; background-image: url(desc.gif); }
-table.results th.headerSortUp { background-color: #e4e7ff; background-image: url(asc.gif); }
-table.results .flagged { color: red; }
-
-/* pkglist: layout */
-div#pkglist-about { margin-top: 1.5em; }
-
-/* pkglist: results navigation */
-#pkglist-stats-top, #pkglist-stats-bottom { font-size: 0.85em; }
-#pkglist-results .pkglist-nav { float: right; margin-top: -2.2em; }
-.pkglist-nav .prev { margin-right: 1em; }
-.pkglist-nav .next { margin-right: 1em; }
-
-/* search fields and other filter selections */
-.filter-criteria h3 { font-size: 1em; margin-top:0; }
-.filter-criteria div { float: left; margin-right: 1.65em; font-size: 0.85em; }
-.filter-criteria legend { display: none; }
-.filter-criteria label { width: auto; display: block; font-weight: normal; }
-
-/* pkgdetails: details links that float on the right */
-#pkgdetails #detailslinks { float: right; }
-#pkgdetails #detailslinks h4 { margin-top: 0; margin-bottom: 0.25em; }
-#pkgdetails #detailslinks ul { list-style: none; padding: 0; margin-bottom: 0; font-size: 0.846em; }
-#pkgdetails #detailslinks > div { padding: 0.5em; margin-bottom: 1em; background: #eee; border: 1px solid #bbb; }
-#pkgdetails #actionlist .flagged { color: red; font-size: 0.9em; font-style: italic; }
-
-/* pkgdetails: pkg info */
-#pkgdetails #pkginfo { width: auto; }
-#pkgdetails #pkginfo td { padding: 0.25em 0 0.25em 1.5em; }
-
-/* pkgdetails: flag package */
-form#flag-pkg-form label { width: 10em; }
-form#flag-pkg-form textarea, form#flag-pkg-form input[type=text] { width: 45%; }
-
-/* pkgdetails: deps, required by and file lists */
-#pkgdetails #metadata h3 { background: #555; color: #fff; font-size: 1em; margin-bottom: 0.5em; padding: 0.2em 0.35em; }
-#pkgdetails #metadata ul { list-style: none; margin: 0; padding: 0; }
-#pkgdetails #metadata li { padding-left: 0.5em; }
-#pkgdetails #metadata p { padding-left: 0.5em; }
-#pkgdetails #metadata .message { font-style: italic; }
-#pkgdetails #metadata br { clear: both; }
-#pkgdetails #pkgdeps { float: left; width: 48%; margin-right: 2%; }
-#pkgdetails #pkgreqs { float: left; width: 50%; }
-#pkgdetails #pkgfiles { clear: left; padding-top: 1em; }
-
-/* dev/TU biographies */
-div#arch-bio-toc { width: 75%; margin: 0 auto; text-align: center; }
-table.arch-bio-entry td.pic { vertical-align: top; padding-right: 15px; padding-top: 10px; }
-table.arch-bio-entry td.pic img { padding: 4px; border: 1px solid #ccc; }
-table.arch-bio-entry table.bio { margin-bottom: 2em; }
-table.arch-bio-entry table.bio th { text-align: left; padding-right: 0.5em; vertical-align: top; white-space: nowrap; }
-table.arch-bio-entry table.bio td { width: 100%; padding-bottom: 0.25em; }
-
-/* dev: login/out */
-p.login-error {}
-table#dev-login { width: auto; }
-
-/* dev dashboard: flagged packages */
-form#dash-pkg-notify { text-align: right; padding: 1em 0 0; margin-top: 1em; font-size: 0.85em; border-top: 1px dotted #aaa; }
-form#dash-pkg-notify label { width: auto; font-weight: normal; }
-form#dash-pkg-notify input { vertical-align: middle; margin: 0 0.25em; }
-form#dash-pkg-notify input[type=submit] { margin-top: -0.25em; }
-form#dash-pkg-notify p { margin: 0; }
-
-/* dev dashboard: collapse stat tables by default */
-table#stats-by-maintainer, table#stats-by-repo, table#stats-by-arch { display: none; }
-table.dash-stats .key { width: 50%; }
-span.dash-click { font-weight: normal; font-size: 0.8em; color: #888; }
-div.dash-stats h3 { color: #07b; }
-
-/* read only (public) todo lists */
-#public_todo_lists .todo_list {
- margin-left: 2em;
-}
-
-/* dev dashboard: admin actions (add news items, todo list, etc) */
-ul.admin-actions { float: right; list-style: none; margin-top: -2.5em; }
-ul.admin-actions li { display: inline; padding-left: 1.5em; }
-
-/* dev: todo list */
-.todo-table .complete { color: green; }
-.todo-table .incomplete { color: red; }
-
-/* dev: signoff page */
-#dev-signoffs ul { list-style: none; margin: 0; padding: 0; }
-#dev-signoffs .signoff-yes { color: green; font-weight: bold; }
-#dev-signoffs .signoff-no { color: red; }
-#dev-signoffs .signed-username { color: #888; margin-left: 0.5em; }
-
-/* highlight current website in the navbar */
-#archnavbar.anb-home ul li#anb-home a { color: white !important; }
-#archnavbar.anb-packages ul li#anb-packages a { color: white !important; }
-#archnavbar.anb-download ul li#anb-download a { color: white !important; }
+/* + * ARCH LINUX DJANGO (MAIN SITE) + * + * Font sizing based on 16px browser defaults (use em): + * 14px = 0.875em + * 13px = 0.812em + * 12px = 0.75em + * 11px = 0.6875em + * + */ + +/* import the global navbar stylesheet */ +@import url('archnavbar/archnavbar.css'); + +/* simple reset */ +* { margin: 0; padding: 0; line-height: 1.4; } + +/* general styling */ +body { min-width: 650px; background: #f6f9fc; color: #222; font: normal 100% sans-serif; text-align: center; } +p { margin: .33em 0 1em; } +ol, ul { margin-bottom: 1em; padding-left: 2em; } +ul { list-style: square; } +code { font: 1.2em monospace; background: #ffa; padding: 0.15em 0.25em; } +pre { font: 1.2em monospace; border: 1px solid #bdb; background: #dfd; padding: 0.5em; margin: 0.25em 2em; } +blockquote { margin: 1.5em 2em; } +input { vertical-align: middle; } +select[multiple] { padding-top: 1px; padding-bottom: 1px; } +select[multiple] option { padding-left: 0.3em; padding-right: 0.5em; } +input[type=submit] { padding-left: 0.6em; padding-right: 0.6em; } +.clear { clear: both; } +hr { border: none; border-top: 1px solid #888; } +img { border: 0; } + +/* scale fonts down to a sane default (16 * .812 = 13px) */ +#content { font-size: 0.812em; } + +/* link style */ +a { text-decoration: none; } +a:link, th a:visited { color: #07b; } +a:visited { color: #666; } +a:hover { text-decoration: underline; color: #666; } +a:active { color: #e90; } + +/* headings */ +h2 { font-size: 1.5em; margin-bottom: 0.5em; border-bottom: 1px solid #888; } +h3 { font-size: 1.25em; margin-top: 1em; } +h4 { font-size: 1.15em; margin-top: 1em; } +h5 { font-size: 1em; margin-top: 1em; } + +/* general layout */ +div#content { width: 95%; margin: 0 auto; text-align: left; } +div#content-left-wrapper { float: left; width: 100%; } /* req to keep content above sidebar in source code */ +div#content-left { margin: 0 340px 0 0; } +div#content-right { float: left; width: 300px; margin-left: -300px; } +div.box { margin-bottom: 1.5em; padding: 0.65em; background: #ecf2f5; border: 1px solid #bcd; } +div#footer { clear: both; margin: 2em 0 1em; } +div#footer p { margin: 0; text-align: center; font-size: 0.85em; } + +/* alignment */ +div.center, table.center, img.center { width: auto; margin-left: auto; margin-right: auto; } +p.center, td.center, th.center { text-align: center; } + +/* table generics */ +table { width: 100%; border-collapse: collapse; } +table .wrap { white-space: normal; } +th, td { white-space: nowrap; text-align: left; } +th { vertical-align: middle; font-weight: bold; } +td { vertical-align: top; } + +/* table pretty styles */ +table.pretty1 { width: auto; margin-top: 0.25em; margin-bottom: 0.5em; border-collapse: collapse; border: 1px solid #bcd; } +table.pretty1 th { padding: 0.35em; background: #e4eeff; border: 1px solid #bcd; } +table.pretty1 td { padding: 0.35em; border: 1px dotted #bcd; } +table.pretty2 { width: auto; margin-top: 0.25em; margin-bottom: 0.5em; border-collapse: collapse; border: 1px solid #bbb; } +table.pretty2 th { padding: 0.35em; background: #eee; border: 1px solid #bbb; } +table.pretty2 td { padding: 0.35em; border: 1px dotted #bbb; } + +/* forms and input styling */ +form p { margin: 0.5em 0; } +fieldset { border: 0; } +label { width: 12em; vertical-align: top; display: inline-block; font-weight: bold; } +input[type=text], input[type=password], textarea { padding: 0.10em; } +form.general-form label, form.general-form .form-help { width: 10em; vertical-align: top; display: inline-block; } +form.general-form input[type=text], form.general-form textarea { width: 45%; } + +/* archdev navbar */ +div#archdev-navbar { margin: 1.5em 0; } +div#archdev-navbar ul { list-style: none; margin: -0.5em 0; padding: 0; } +div#archdev-navbar li { display: inline; margin: 0; padding: 0; font-size: 0.9em; } +div#archdev-navbar li a { padding: 0 0.5em; color: #07b; } + +/* error/info messages (x pkg is already flagged out-of-date, etc) */ +#sys-message { width: 35em; text-align: center; margin: 1em auto; padding: 0.5em; background: #fff; border: 1px solid #f00; } +#sys-message p { margin: 0; } + +ul.errorlist { color: red; } + +/* + * PAGE SPECIFIC STYLES + */ + +/* home: introduction */ +#intro p.readmore { margin: -0.5em 0 0 0; font-size: .9em; text-align: right; } + +/* home: news */ +#news { margin-top: 1.5em; } +#news h3 { border-bottom: 1px solid #888; } +#news div { margin-bottom: 1em; } +#news div p { margin-bottom: 0.5em; } +#news .more { font-weight: normal; } +#news .rss-icon { float: right; margin: -1.6em 0.4em 0 0; } +#news h4 { font-size: 1em; margin-top: 1.5em; border-bottom: 1px dotted #bbb; } +#news .timestamp { float: right; font-size: 0.85em; margin: -1.8em 0.5em 0 0; } + +/* home: pkgsearch box */ +#pkgsearch { padding: 1em 0.75em; background: #787DAB; color: #fff; border: 1px solid #3C47AB; } +#pkgsearch label { width: auto; padding: 0.1em 0; } +#pkgsearch input { width: 10em; float: right; font-size: 1em; color: #000; background: #fff; border: 1px solid #09c; } + +/* home: recent pkg updates */ +#pkg-updates h3 { margin: 0 0 0.3em; } +#pkg-updates .more { font-weight: normal; } +#pkg-updates .rss-icon { float: right; margin: -2em 0 0 0; } +#pkg-updates table { margin: 0; } +#pkg-updates td.pkg-name { white-space: normal; } +#pkg-updates td.pkg-arch { text-align: right; } +#pkg-updates span.testing, #pkg-updates span.community-testing, span.multilib-testing { font-style: italic; } + +/* home: sidebar navigation */ +div#nav-sidebar ul { list-style: none; margin: 0.5em 0 0.5em 1em; padding: 0; } + +/* home: sponsor banners */ +div#arch-sponsors img { padding: 0.3em 0; } + +/* home: sidebar components (navlist, sponsors, pkgsearch, etc) */ +div.widget { margin-bottom: 1.5em; } + +/* feeds page */ +#rss-feeds .rss { padding-right: 20px; background: url(rss.png) top right no-repeat; } + +/* artwork: logo images */ +#artwork img.inverted { background: #333; padding: 0; } +#artwork div.imagelist img { display: inline; margin: 0.75em; } + +/* news: article list */ +.news-nav { float: right; margin-top: -2.2em; } +.news-nav .prev, .news-nav .next { margin-left: 1em; margin-right: 1em; } + +/* news: article pages */ +div.news-article .article-info { margin: 0; color: #999; } + +/* news: add/edit article */ +form#newsform { width: 60em; } +form#newsform input[type=text], form#newsform textarea { width: 75%; } + +/* donate: donor list */ +div#donor-list ul { width: 100%; } +/* max 4 columns, but possibly fewer if screen size doesn't allow for more */ +div#donor-list li { float: left; width: 25%; min-width: 20em; } + +/* download page */ +#arch-downloads h3 { border-bottom: 1px dotted #aaa; } +table#download-torrents .cpu-arch { text-align: center; } +table#download-mirrors { width: auto; margin-bottom: 1em; } +table#download-mirrors td.mirror-country { padding-top: 1em; } +table#download-mirrors td.mirror-server { padding-right: 1em; } +table#download-mirrors a { display: block; float: right; width: 4em; } + +/* pkglists/devlists */ +table.results { font-size: 0.846em; border-top: 1px dotted #999; border-bottom: 1px dotted #999; } +table.results th { padding: 0.5em 1em 0.25em 0.25em; border-bottom: 1px solid #999; white-space: nowrap; background-color:#fff; } +table.results td { padding: .3em 1em .3em 3px; } +table.results tr.odd { background: #fff; } +table.results tr.even { background: #e4eeff; } +/* additional styles for JS sorting */ +table.results th.header { padding-right: 20px; background-image: url(nosort.gif); background-repeat: no-repeat; background-position: center right; cursor: pointer; } +table.results th.headerSortDown { background-color: #e4eeff; background-image: url(desc.gif); } +table.results th.headerSortUp { background-color: #e4eeff; background-image: url(asc.gif); } +table.results .flagged { color: red; } + +/* pkglist: layout */ +div#pkglist-about { margin-top: 1.5em; } + +/* pkglist: results navigation */ +#pkglist-stats-top, #pkglist-stats-bottom { font-size: 0.85em; } +#pkglist-results .pkglist-nav { float: right; margin-top: -2.2em; } +.pkglist-nav .prev { margin-right: 1em; } +.pkglist-nav .next { margin-right: 1em; } + +/* search fields and other filter selections */ +.filter-criteria h3 { font-size: 1em; margin-top:0; } +.filter-criteria div { float: left; margin-right: 1.65em; font-size: 0.85em; } +.filter-criteria legend { display: none; } +.filter-criteria label { width: auto; display: block; font-weight: normal; } + +/* pkgdetails: details links that float on the right */ +#pkgdetails #detailslinks { float: right; } +#pkgdetails #detailslinks h4 { margin-top: 0; margin-bottom: 0.25em; } +#pkgdetails #detailslinks ul { list-style: none; padding: 0; margin-bottom: 0; font-size: 0.846em; } +#pkgdetails #detailslinks > div { padding: 0.5em; margin-bottom: 1em; background: #eee; border: 1px solid #bbb; } +#pkgdetails #actionlist .flagged { color: red; font-size: 0.9em; font-style: italic; } + +/* pkgdetails: pkg info */ +#pkgdetails #pkginfo { width: auto; } +#pkgdetails #pkginfo td { padding: 0.25em 0 0.25em 1.5em; } + +/* pkgdetails: flag package */ +form#flag-pkg-form label { width: 10em; } +form#flag-pkg-form textarea, form#flag-pkg-form input[type=text] { width: 45%; } + +/* pkgdetails: deps, required by and file lists */ +#pkgdetails #metadata h3 { background: #555; color: #fff; font-size: 1em; margin-bottom: 0.5em; padding: 0.2em 0.35em; } +#pkgdetails #metadata ul { list-style: none; margin: 0; padding: 0; } +#pkgdetails #metadata li { padding-left: 0.5em; } +#pkgdetails #metadata p { padding-left: 0.5em; } +#pkgdetails #metadata .message { font-style: italic; } +#pkgdetails #metadata br { clear: both; } +#pkgdetails #pkgdeps { float: left; width: 48%; margin-right: 2%; } +#pkgdetails #metadata .virtual-dep { font-style: italic; } +#pkgdetails #metadata .testing-dep { font-style: italic; } +#pkgdetails #metadata .opt-dep { font-style: italic; } +#pkgdetails #metadata .dep-desc { font-style: italic; } +#pkgdetails #pkgreqs { float: left; width: 50%; } +#pkgdetails #pkgfiles { clear: left; padding-top: 1em; } + +/* dev/TU biographies */ +div#arch-bio-toc { width: 75%; margin: 0 auto; text-align: center; } +table.arch-bio-entry td.pic { vertical-align: top; padding-right: 15px; padding-top: 10px; } +table.arch-bio-entry td.pic img { padding: 4px; border: 1px solid #ccc; } +table.arch-bio-entry table.bio { margin-bottom: 2em; } +table.arch-bio-entry table.bio th { text-align: left; padding-right: 0.5em; vertical-align: top; white-space: nowrap; } +table.arch-bio-entry table.bio td { width: 100%; padding-bottom: 0.25em; } + +/* dev: login/out */ +p.login-error {} +table#dev-login { width: auto; } + +/* dev dashboard: flagged packages */ +form#dash-pkg-notify { text-align: right; padding: 1em 0 0; margin-top: 1em; font-size: 0.85em; border-top: 1px dotted #aaa; } +form#dash-pkg-notify label { width: auto; font-weight: normal; } +form#dash-pkg-notify input { vertical-align: middle; margin: 0 0.25em; } +form#dash-pkg-notify input[type=submit] { margin-top: -0.25em; } +form#dash-pkg-notify p { margin: 0; } + +/* dev dashboard: collapse stat tables by default */ +table#stats-by-maintainer, table#stats-by-repo, table#stats-by-arch { display: none; } +table.dash-stats .key { width: 50%; } +span.dash-click { font-weight: normal; font-size: 0.8em; color: #888; } +div.dash-stats h3 { color: #07b; } + +/* read only (public) todo lists */ +#public_todo_lists .todo_list { + margin-left: 2em; +} + +/* dev dashboard: admin actions (add news items, todo list, etc) */ +ul.admin-actions { float: right; list-style: none; margin-top: -2.5em; } +ul.admin-actions li { display: inline; padding-left: 1.5em; } + +/* dev: todo list */ +.todo-table .complete { color: green; } +.todo-table .incomplete { color: red; } + +/* dev: signoff page */ +#dev-signoffs ul { list-style: none; margin: 0; padding: 0; } +#dev-signoffs .signoff-yes { color: green; font-weight: bold; } +#dev-signoffs .signoff-no { color: red; } +#dev-signoffs .signed-username { color: #888; margin-left: 0.5em; } + +/* highlight current website in the navbar */ +#archnavbar.anb-home ul li#anb-home a { color: white !important; } +#archnavbar.anb-packages ul li#anb-packages a { color: white !important; } +#archnavbar.anb-download ul li#anb-download a { color: white !important; } diff --git a/mirrors/admin.py b/mirrors/admin.py index 6990cca2..b9c2876a 100644 --- a/mirrors/admin.py +++ b/mirrors/admin.py @@ -1,4 +1,5 @@ import re +from urlparse import urlparse, urlunsplit from django import forms from django.contrib import admin @@ -9,15 +10,26 @@ class MirrorUrlForm(forms.ModelForm): class Meta: model = MirrorUrl def clean_url(self): + # is this a valid-looking URL? + url_parts = urlparse(self.cleaned_data["url"]) + if not url_parts.scheme: + raise forms.ValidationError("No URL scheme (protocol) provided.") + if not url_parts.netloc: + raise forms.ValidationError("No URL host provided.") + if url_parts.params or url_parts.query or url_parts.fragment: + raise forms.ValidationError( + "URL parameters, query, and fragment elements are not supported.") # ensure we always save the URL with a trailing slash - url = self.cleaned_data["url"].strip() - if url[-1] == '/': - return url - return url + '/' + path = url_parts.path + if not path.endswith('/'): + path += '/' + url = urlunsplit((url_parts.scheme, url_parts.netloc, path, '', '')) + return url class MirrorUrlInlineAdmin(admin.TabularInline): model = MirrorUrl form = MirrorUrlForm + readonly_fields = ('protocol', 'has_ipv4', 'has_ipv6') extra = 3 # ripped off from django.forms.fields, adding netmask ability diff --git a/mirrors/management/commands/mirrorcheck.py b/mirrors/management/commands/mirrorcheck.py index 44d2b364..51be71ea 100644 --- a/mirrors/management/commands/mirrorcheck.py +++ b/mirrors/management/commands/mirrorcheck.py @@ -10,7 +10,9 @@ Usage: ./manage.py mirrorcheck """ from django.core.management.base import NoArgsCommand +from django.db import transaction +from collections import deque from datetime import datetime, timedelta import logging import re @@ -130,7 +132,7 @@ def mirror_url_worker(work, output): item = work.get(block=False) try: log = check_mirror_url(item) - output.put(log) + output.append(log) finally: work.task_done() except Empty: @@ -139,7 +141,7 @@ def mirror_url_worker(work, output): class MirrorCheckPool(object): def __init__(self, work, num_threads=10): self.tasks = Queue() - self.logs = Queue() + self.logs = deque() for i in list(work): self.tasks.put(i) self.threads = [] @@ -149,6 +151,7 @@ class MirrorCheckPool(object): thread.daemon = True self.threads.append(thread) + @transaction.commit_on_success def run(self): logger.debug("starting threads") for t in self.threads: @@ -156,13 +159,9 @@ class MirrorCheckPool(object): logger.debug("joining on all threads") self.tasks.join() logger.debug("processing log entries") - try: - while True: - log = self.logs.get(block=False) - log.save() - self.logs.task_done() - except Empty: - logger.debug("all log items saved to database") + for log in self.logs: + log.save() + logger.debug("log entries saved") def check_current_mirrors(): urls = MirrorUrl.objects.filter( diff --git a/mirrors/management/commands/mirrorresolv.py b/mirrors/management/commands/mirrorresolv.py index 8cbd51a3..8a628bd4 100644 --- a/mirrors/management/commands/mirrorresolv.py +++ b/mirrors/management/commands/mirrorresolv.py @@ -12,7 +12,6 @@ from django.core.management.base import NoArgsCommand import sys import logging -from urlparse import urlparse import socket from mirrors.models import MirrorUrl @@ -42,15 +41,13 @@ def resolve_mirrors(): logger.debug("requesting list of mirror URLs") for mirrorurl in MirrorUrl.objects.filter(mirror__active=True): try: - hostname = urlparse(mirrorurl.url).hostname - logger.debug("resolving %3i (%s)", mirrorurl.id, hostname) - info = socket.getaddrinfo(hostname, None, 0, socket.SOCK_STREAM) - families = [x[0] for x in info] + logger.debug("resolving %3i (%s)", mirrorurl.id, mirrorurl.hostname) + families = mirrorurl.address_families() mirrorurl.has_ipv4 = socket.AF_INET in families mirrorurl.has_ipv6 = socket.AF_INET6 in families - logger.debug("%s: v4: %s v6: %s", hostname, + logger.debug("%s: v4: %s v6: %s", mirrorurl.hostname, mirrorurl.has_ipv4, mirrorurl.has_ipv6) - mirrorurl.save() + mirrorurl.save(force_update=True) except socket.error, e: logger.warn("error resolving %s: %s", hostname, e) diff --git a/mirrors/models.py b/mirrors/models.py index e070b1cd..401821a8 100644 --- a/mirrors/models.py +++ b/mirrors/models.py @@ -1,4 +1,8 @@ from django.db import models +from django.core.exceptions import ValidationError + +import socket +from urlparse import urlparse TIER_CHOICES = ( (0, 'Tier 0'), @@ -47,13 +51,43 @@ class MirrorProtocol(models.Model): class Meta: verbose_name = 'Mirror Protocol' + ordering = ('protocol',) class MirrorUrl(models.Model): url = models.CharField(max_length=255) - protocol = models.ForeignKey(MirrorProtocol, related_name="urls") + protocol = models.ForeignKey(MirrorProtocol, related_name="urls", + editable=False) mirror = models.ForeignKey(Mirror, related_name="urls") - has_ipv4 = models.BooleanField("IPv4 capable", default=True) - has_ipv6 = models.BooleanField("IPv6 capable", default=False) + has_ipv4 = models.BooleanField("IPv4 capable", default=True, + editable=False) + has_ipv6 = models.BooleanField("IPv6 capable", default=False, + editable=False) + + def address_families(self): + hostname = urlparse(self.url).hostname + info = socket.getaddrinfo(hostname, None, 0, socket.SOCK_STREAM) + families = [x[0] for x in info] + return families + + @property + def hostname(self): + return urlparse(self.url).hostname + + def clean(self): + try: + # Auto-map the protocol field by looking at the URL + protocol = urlparse(self.url).scheme + self.protocol = MirrorProtocol.objects.get(protocol=protocol) + except Exception as e: + raise ValidationError(e) + try: + families = self.address_families() + self.has_ipv4 = socket.AF_INET in families + self.has_ipv6 = socket.AF_INET6 in families + except socket.error as e: + # We don't fail in this case; we'll just set both to False + self.has_ipv4 = False + self.has_ipv6 = False def __unicode__(self): return self.url diff --git a/mirrors/urls.py b/mirrors/urls.py new file mode 100644 index 00000000..fed9c807 --- /dev/null +++ b/mirrors/urls.py @@ -0,0 +1,10 @@ +from django.conf.urls.defaults import patterns + +urlpatterns = patterns('mirrors.views', + (r'^$', 'mirrors', {}, 'mirror-list'), + (r'^status/$', 'status', {}, 'mirror-status'), + (r'^status/json/$', 'status_json', {}, 'mirror-status-json'), + (r'^(?P<name>[\.\-\w]+)/$', 'mirror_details'), +) + +# vim: set ts=4 sw=4 et: diff --git a/mirrors/urls_mirrorlist.py b/mirrors/urls_mirrorlist.py new file mode 100644 index 00000000..70bc18d2 --- /dev/null +++ b/mirrors/urls_mirrorlist.py @@ -0,0 +1,12 @@ +from django.conf.urls.defaults import patterns + +urlpatterns = patterns('mirrors.views', + (r'^$', 'generate_mirrorlist', {}, 'mirrorlist'), + (r'^all/$', 'find_mirrors', {'countries': ['all']}), + (r'^all/ftp/$', 'find_mirrors', + {'countries': ['all'], 'protocols': ['ftp']}), + (r'^all/http/$', 'find_mirrors', + {'countries': ['all'], 'protocols': ['http']}), +) + +# vim: set ts=4 sw=4 et: diff --git a/packages/admin.py b/packages/admin.py new file mode 100644 index 00000000..3ecfdbb1 --- /dev/null +++ b/packages/admin.py @@ -0,0 +1,11 @@ +from django.contrib import admin + +from .models import PackageRelation + +class PackageRelationAdmin(admin.ModelAdmin): + list_display = ('user', 'pkgbase', 'type') + list_filter = ('type', 'user') + +admin.site.register(PackageRelation, PackageRelationAdmin) + +# vim: set ts=4 sw=4 et: diff --git a/packages/migrations/0004_auto__add_license.py b/packages/migrations/0004_auto__add_license.py new file mode 100644 index 00000000..001440fe --- /dev/null +++ b/packages/migrations/0004_auto__add_license.py @@ -0,0 +1,118 @@ +# encoding: utf-8 +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Adding model 'License' + db.create_table('packages_license', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('pkg', self.gf('django.db.models.fields.related.ForeignKey')(related_name='licenses', to=orm['main.Package'])), + ('name', self.gf('django.db.models.fields.CharField')(max_length=255)), + )) + db.send_create_signal('packages', ['License']) + + + def backwards(self, orm): + # Deleting model 'License' + db.delete_table('packages_license') + + + models = { + 'auth.group': { + 'Meta': {'object_name': 'Group'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'auth.user': { + 'Meta': {'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + 'contenttypes.contenttype': { + 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + }, + 'main.arch': { + 'Meta': {'ordering': "['name']", 'object_name': 'Arch', 'db_table': "'arches'"}, + 'agnostic': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}) + }, + 'main.package': { + 'Meta': {'ordering': "('pkgname',)", 'object_name': 'Package', 'db_table': "'packages'"}, + 'arch': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'packages'", 'to': "orm['main.Arch']"}), + 'build_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}), + 'compressed_size': ('django.db.models.fields.BigIntegerField', [], {'null': 'True'}), + 'filename': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'files_last_update': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'flag_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'installed_size': ('django.db.models.fields.BigIntegerField', [], {'null': 'True'}), + 'last_update': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'license': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}), + 'packager': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True'}), + 'packager_str': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'pkgbase': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}), + 'pkgdesc': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}), + 'pkgname': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}), + 'pkgrel': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'pkgver': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'repo': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'packages'", 'to': "orm['main.Repo']"}), + 'url': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}) + }, + 'main.repo': { + 'Meta': {'ordering': "['name']", 'object_name': 'Repo', 'db_table': "'repos'"}, + 'bugs_project': ('django.db.models.fields.SmallIntegerField', [], {'default': '1'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), + 'svn_root': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'testing': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) + }, + 'packages.license': { + 'Meta': {'object_name': 'License'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'pkg': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'licenses'", 'to': "orm['main.Package']"}) + }, + 'packages.packagegroup': { + 'Meta': {'object_name': 'PackageGroup'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'pkg': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'groups'", 'to': "orm['main.Package']"}) + }, + 'packages.packagerelation': { + 'Meta': {'unique_together': "(('pkgbase', 'user', 'type'),)", 'object_name': 'PackageRelation'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'pkgbase': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'type': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'package_relations'", 'to': "orm['auth.User']"}) + } + } + + complete_apps = ['packages'] diff --git a/packages/migrations/0005_move_license_data.py b/packages/migrations/0005_move_license_data.py new file mode 100644 index 00000000..1c1e689a --- /dev/null +++ b/packages/migrations/0005_move_license_data.py @@ -0,0 +1,120 @@ +# encoding: utf-8 +import datetime +from south.db import db +from south.v2 import DataMigration +from django.db import models + +class Migration(DataMigration): + + depends_on = ( + # the last structural change to the package model + ('main', '0026_auto__add_field_package_packager_str__add_field_package_packager'), + ) + + def forwards(self, orm): + "Migrate the flat license text to a seperate relation." + for pkg in orm['main.Package'].objects.all(): + licenses = pkg.license.split(u', ') + for license in licenses: + pkg.licenses.create(name=license) + + def backwards(self, orm): + for pkg in orm['main.Package'].objects.all(): + pkg.license = u', '.join([l.name for l in pkg.licenses.all()]) + pkg.save() + + models = { + 'auth.group': { + 'Meta': {'object_name': 'Group'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'auth.user': { + 'Meta': {'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + 'contenttypes.contenttype': { + 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + }, + 'main.arch': { + 'Meta': {'ordering': "['name']", 'object_name': 'Arch', 'db_table': "'arches'"}, + 'agnostic': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}) + }, + 'main.package': { + 'Meta': {'ordering': "('pkgname',)", 'object_name': 'Package', 'db_table': "'packages'"}, + 'arch': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'packages'", 'to': "orm['main.Arch']"}), + 'build_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}), + 'compressed_size': ('django.db.models.fields.BigIntegerField', [], {'null': 'True'}), + 'filename': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'files_last_update': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'flag_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'installed_size': ('django.db.models.fields.BigIntegerField', [], {'null': 'True'}), + 'last_update': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'license': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}), + 'packager': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True'}), + 'packager_str': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'pkgbase': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}), + 'pkgdesc': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}), + 'pkgname': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}), + 'pkgrel': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'pkgver': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'repo': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'packages'", 'to': "orm['main.Repo']"}), + 'url': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}) + }, + 'main.repo': { + 'Meta': {'ordering': "['name']", 'object_name': 'Repo', 'db_table': "'repos'"}, + 'bugs_project': ('django.db.models.fields.SmallIntegerField', [], {'default': '1'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), + 'svn_root': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'testing': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) + }, + 'packages.license': { + 'Meta': {'object_name': 'License'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'pkg': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'licenses'", 'to': "orm['main.Package']"}) + }, + 'packages.packagegroup': { + 'Meta': {'object_name': 'PackageGroup'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'pkg': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'groups'", 'to': "orm['main.Package']"}) + }, + 'packages.packagerelation': { + 'Meta': {'unique_together': "(('pkgbase', 'user', 'type'),)", 'object_name': 'PackageRelation'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'pkgbase': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'type': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'package_relations'", 'to': "orm['auth.User']"}) + } + } + + complete_apps = ['packages'] diff --git a/packages/models.py b/packages/models.py index 70ac4fe5..5dbdea45 100644 --- a/packages/models.py +++ b/packages/models.py @@ -1,4 +1,5 @@ from django.db import models +from django.db.models.signals import post_save from django.contrib.auth.models import User class PackageRelation(models.Model): @@ -17,6 +18,21 @@ class PackageRelation(models.Model): pkgbase = models.CharField(max_length=255) user = models.ForeignKey(User, related_name="package_relations") type = models.PositiveIntegerField(choices=TYPE_CHOICES, default=MAINTAINER) + + def get_associated_packages(self): + # TODO: delayed import to avoid circular reference + from main.models import Package + return Package.objects.filter(pkgbase=self.pkgbase).select_related( + 'arch', 'repo') + + def repositories(self): + packages = self.get_associated_packages() + return sorted(set([p.repo for p in packages])) + + def __unicode__(self): + return "%s: %s (%s)" % ( + self.pkgbase, self.user, self.get_type_display()) + class Meta: unique_together = (('pkgbase', 'user', 'type'),) @@ -25,7 +41,31 @@ class PackageGroup(models.Model): Represents a group a package is in. There is no actual group entity, only names that link to given packages. ''' - pkg = models.ForeignKey('main.Package') + pkg = models.ForeignKey('main.Package', related_name='groups') + name = models.CharField(max_length=255) + + def __unicode__(self): + return "%s: %s" % (name, pkg) + +class License(models.Model): + pkg = models.ForeignKey('main.Package', related_name='licenses') name = models.CharField(max_length=255) + def __unicode__(self): + return self.name + + class Meta: + ordering = ['name'] + +def remove_inactive_maintainers(sender, instance, created, **kwargs): + # instance is an auth.models.User; we want to remove any existing + # maintainer relations if the user is no longer active + if not instance.is_active: + maint_relations = PackageRelation.objects.filter(user=instance, + type=PackageRelation.MAINTAINER) + maint_relations.delete() + +post_save.connect(remove_inactive_maintainers, sender=User, + dispatch_uid="packages.models") + # vim: set ts=4 sw=4 et: diff --git a/packages/urls.py b/packages/urls.py index b7ce5c74..638a370a 100644 --- a/packages/urls.py +++ b/packages/urls.py @@ -25,6 +25,8 @@ urlpatterns = patterns('packages.views', (r'^(?P<page>\d+)/$', 'search'), (r'^differences/$', 'arch_differences'), + (r'^stale_relations/$', 'stale_relations'), + (r'^stale_relations/update/$','stale_relations_update'), (r'^(?P<name>[A-z0-9\-+.]+)/$', 'details'), diff --git a/packages/urls_groups.py b/packages/urls_groups.py new file mode 100644 index 00000000..c561e50d --- /dev/null +++ b/packages/urls_groups.py @@ -0,0 +1,9 @@ +from django.conf.urls.defaults import patterns + +urlpatterns = patterns('packages.views', + (r'^$', 'groups', {}, 'groups-list'), + (r'^(?P<arch>[A-z0-9]+)/$', 'groups'), + (r'^(?P<arch>[A-z0-9]+)/(?P<name>[A-z0-9\-+.]+)/$', 'group_details'), +) + +# vim: set ts=4 sw=4 et: diff --git a/packages/utils.py b/packages/utils.py index aaec0ec4..8d9f13ab 100644 --- a/packages/utils.py +++ b/packages/utils.py @@ -5,7 +5,7 @@ from operator import itemgetter from main.models import Package from main.utils import cache_function -from .models import PackageGroup +from .models import PackageGroup, PackageRelation @cache_function(300) def get_group_info(include_arches=None): @@ -128,4 +128,26 @@ SELECT p.id, q.id differences.sort(key=lambda a: (a.repo.name, a.pkgname)) return differences +def get_wrong_permissions(): + sql = """ +SELECT DISTINCT id + FROM ( + SELECT pr.id, p.repo_id, pr.user_id + FROM packages p + JOIN packages_packagerelation pr ON p.pkgbase = pr.pkgbase + WHERE pr.type = %s + ) pkgs + WHERE pkgs.repo_id NOT IN ( + SELECT repo_id FROM user_profiles_allowed_repos ar + INNER JOIN user_profiles up ON ar.userprofile_id = up.id + WHERE up.user_id = pkgs.user_id + ) +""" + cursor = connection.cursor() + cursor.execute(sql, [PackageRelation.MAINTAINER]) + to_fetch = [row[0] for row in cursor.fetchall()] + relations = PackageRelation.objects.select_related('user').filter( + id__in=to_fetch) + return relations + # vim: set ts=4 sw=4 et: diff --git a/packages/views.py b/packages/views.py index 4f7c3b93..59779fe4 100644 --- a/packages/views.py +++ b/packages/views.py @@ -8,9 +8,10 @@ from django.core.mail import send_mail from django.db.models import Q from django.http import HttpResponse, Http404 from django.shortcuts import get_object_or_404, redirect -from django.template import loader, Context, RequestContext +from django.template import loader, Context from django.utils import simplejson from django.views.decorators.cache import never_cache +from django.views.decorators.http import require_POST from django.views.decorators.vary import vary_on_headers from django.views.generic import list_detail from django.views.generic.simple import direct_to_template @@ -23,7 +24,7 @@ from main.models import Arch, Repo, Signoff from main.utils import make_choice from mirrors.models import MirrorUrl from .models import PackageRelation -from .utils import get_group_info, get_differences_info +from .utils import get_group_info, get_differences_info, get_wrong_permissions def opensearch(request): if request.is_secure(): @@ -36,6 +37,7 @@ def opensearch(request): mimetype='application/opensearchdescription+xml') @permission_required('main.change_package') +@require_POST def update(request): ids = request.POST.getlist('pkgid') count = 0 @@ -104,8 +106,7 @@ def group_details(request, arch, name): arch = get_object_or_404(Arch, name=arch) arches = [ arch ] arches.extend(Arch.objects.filter(agnostic=True)) - pkgs = Package.objects.filter(packagegroup__name=name, - arch__in=arches) + pkgs = Package.objects.filter(groups__name=name, arch__in=arches) pkgs = pkgs.order_by('pkgname') if len(pkgs) == 0: raise Http404 @@ -126,8 +127,8 @@ def getmaintainer(request, name, repo, arch): return HttpResponse(str('\n'.join(names)), mimetype='text/plain') class PackageSearchForm(forms.Form): - repo = forms.ChoiceField(required=False) - arch = forms.ChoiceField(required=False) + repo = forms.MultipleChoiceField(required=False) + arch = forms.MultipleChoiceField(required=False) q = forms.CharField(required=False) maintainer = forms.ChoiceField(required=False) last_update = forms.DateField(required=False, widget=AdminDateWidget(), @@ -156,9 +157,9 @@ class PackageSearchForm(forms.Form): def __init__(self, *args, **kwargs): super(PackageSearchForm, self).__init__(*args, **kwargs) - self.fields['repo'].choices = [('', 'All')] + make_choice( + self.fields['repo'].choices = make_choice( [repo.name for repo in Repo.objects.all()]) - self.fields['arch'].choices = [('', 'All')] + make_choice( + self.fields['arch'].choices = make_choice( [arch.name for arch in Arch.objects.all()]) self.fields['q'].widget.attrs.update({"size": "30"}) maints = User.objects.filter(is_active=True).order_by('username') @@ -177,11 +178,11 @@ def search(request, page=None): if form.is_valid(): if form.cleaned_data['repo']: packages = packages.filter( - repo__name=form.cleaned_data['repo']) + repo__name__in=form.cleaned_data['repo']) if form.cleaned_data['arch']: packages = packages.filter( - arch__name=form.cleaned_data['arch']) + arch__name__in=form.cleaned_data['arch']) if form.cleaned_data['maintainer'] == 'orphan': inner_q = PackageRelation.objects.all().values('pkgbase') @@ -235,7 +236,7 @@ def search(request, page=None): def files(request, name, repo, arch): pkg = get_object_or_404(Package, pkgname=name, repo__name__iexact=repo, arch__name=arch) - fileslist = PackageFile.objects.filter(pkg=pkg).order_by('path') + fileslist = PackageFile.objects.filter(pkg=pkg).order_by('directory', 'filename') template = 'packages/files.html' if request.is_ajax(): template = 'packages/files-list.html' @@ -402,4 +403,32 @@ def arch_differences(request): } return direct_to_template(request, 'packages/differences.html', context) +@permission_required('main.change_package') +def stale_relations(request): + relations = PackageRelation.objects.select_related('user') + pkgbases = Package.objects.all().values('pkgbase') + + inactive_user = relations.filter(user__is_active=False) + missing_pkgbase = relations.exclude( + pkgbase__in=pkgbases).order_by('pkgbase') + wrong_permissions = get_wrong_permissions() + + context = { + 'inactive_user': inactive_user, + 'missing_pkgbase': missing_pkgbase, + 'wrong_permissions': wrong_permissions, + } + return direct_to_template(request, 'packages/stale_relations.html', context) + +@permission_required('packages.delete_packagerelation') +@require_POST +def stale_relations_update(request): + ids = set(request.POST.getlist('relation_id')) + + if ids: + PackageRelation.objects.filter(id__in=ids).delete() + + messages.info(request, "%d package relations deleted." % len(ids)) + return redirect('/packages/stale_relations/') + # vim: set ts=4 sw=4 et: diff --git a/public/views.py b/public/views.py index 43cc5882..a8e2a001 100644 --- a/public/views.py +++ b/public/views.py @@ -5,8 +5,10 @@ from . import utils from django.contrib.auth.models import User from django.db.models import Q +from django.http import Http404 from django.views.generic import list_detail from django.views.generic.simple import direct_to_template +from django.shortcuts import redirect def index(request): @@ -17,20 +19,28 @@ def index(request): } return direct_to_template(request, 'public/index.html', context) -def userlist(request, type='Developers'): +USER_LISTS = { + 'hackers': { + 'user_type': 'Hackers', + 'description': "This is a list of the current Parabola Hackers. They maintain the [libre] package repository and keep the [core], [extra] and [community] repositories clean of unfree software, in addition to doing any other developer duties.", + }, + 'fellows': { + 'user_type': 'Fellows', + 'description': "Below you can find a list of ex-hackers (aka project fellows). These folks helped make Parabola what it is today. Thanks!", + }, +} + +def userlist(request, type='hackers'): users = User.objects.order_by('username').select_related('userprofile') - if type == 'Hackers': + if type == 'hackers': users = users.filter(is_active=True, groups__name="Hackers") - msg = "This is a list of the current Parabola GNU/Linux hackers. They maintain the *-libre packages in addition to doing any other developer duties." - elif type == 'Fellows': - users = users.filter(is_active=False) - msg = "Below you can find a list of ex-hackers (aka project fellows). These folks helped make Parabola what it is today. Thanks!" + elif type == 'fellows': + users = users.filter(is_active=False, groups__name__in=["Hackers"]) + else: + raise Http404 - context = { - 'user_type': type, - 'description': msg, - 'users': users, - } + context = USER_LISTS[type].copy() + context['users'] = users return direct_to_template(request, 'public/userlist.html', context) def donate(request): @@ -40,14 +50,7 @@ def donate(request): return direct_to_template(request, 'public/donate.html', context) def download(request): - qset = MirrorUrl.objects.select_related('mirror', 'protocol').filter( - protocol__is_download=True, - mirror__public=True, mirror__active=True, mirror__isos=True - ) - return list_detail.object_list(request, - qset.order_by('mirror__country', 'mirror__name', 'protocol'), - template_name="public/download.html", - template_object_name="mirror_url") + return redirect('http://wiki.parabolagnulinux.org/get', permanent=True) def feeds(request): context = { diff --git a/requirements.txt b/requirements.txt index ba21a59a..0a746d96 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ -Django==1.2.4 +Django==1.2.5 Markdown==2.0.3 South==0.7.3 pytz>=2010o diff --git a/requirements_prod.txt b/requirements_prod.txt index b8665f35..d9875667 100644 --- a/requirements_prod.txt +++ b/requirements_prod.txt @@ -1,4 +1,4 @@ -Django==1.2.4 +Django==1.2.5 Markdown==2.0.3 MySQL-python==1.2.3c1 South==0.7.3 diff --git a/templates/base.html b/templates/base.html index bf780460..d0378567 100644 --- a/templates/base.html +++ b/templates/base.html @@ -43,7 +43,7 @@ title="dev mailing list archives">Archives</a></li> <li><a href="/devel/clock/" title="Developer world clocks">Dev Clocks</a></li> <li><a href="/devel/profile/" title="Modify your account profile">Profile</a></li> - <li><a href="/accounts/logout/" title="Logout of the developer interface">Logout</a></li> + <li><a href="/logout/" title="Logout of the developer interface">Logout</a></li> </ul> {% endif %} </div><!-- #archdev-navbar --> diff --git a/templates/devel/index.html b/templates/devel/index.html index 54bb317d..b681a96e 100644 --- a/templates/devel/index.html +++ b/templates/devel/index.html @@ -89,15 +89,6 @@ </tbody> </table> - <form id="dash-pkg-notify" method="post" action="/devel/notify/">{% csrf_token %} - <fieldset> - <p><input id="notify" name="notify" type="checkbox" value="yes" - {% if user.get_profile.notify %} checked="checked"{% endif %} /> - <label for="notify">Notify me when packages are flagged out-of-date</label> - <input title="Update notification status" type="submit" value="Update" /></p> - </fieldset> - </form> - </div><!-- #dev-dashboard --> <div id="dash-by-arch" class="dash-stats box"> diff --git a/templates/devel/new_account.txt b/templates/devel/new_account.txt new file mode 100644 index 00000000..1159992a --- /dev/null +++ b/templates/devel/new_account.txt @@ -0,0 +1,5 @@ +You can now log into https://{{ site.domain }}/login/ with these login details: +Username: {{ user.username }} +Password: {{ password }} + +Please update your profile once logged in and change your password. diff --git a/templates/general_form.html b/templates/general_form.html index 92625cf2..5e620087 100644 --- a/templates/general_form.html +++ b/templates/general_form.html @@ -6,14 +6,18 @@ <h2>{{title}}</h2> - {% if description %}{{description}}{% endif %} + {{description}} + {{form.non_field_errors}} <form class="general-form" method="post">{% csrf_token %} <fieldset> {% for field in form %} - <p><label>{{field.label}}{% if field.help_text %}:</label><br /> - <span class="form-help">{{field.help_text}}</span> {% else %}:</label> {% endif %} - {{field}} {% if field.required %}<span class="form-req-field">*</span>{% endif%}</p> + {{field.errors}} + <p><label for="{{field.auto_id}}">{{field.label}}:</label> + {% if field.help_text %}<br/><span class="form-help">{{field.help_text}}</span>{% endif %} + {{field}} + {% if field.field.required %}<span class="form-req-field">*</span>{% endif %} + </p> {% endfor %} </fieldset> <p><label></label> <input type="submit" value="{{submit_text}}" /></p> diff --git a/templates/packages/details.html b/templates/packages/details.html index b1b50d6e..4fae6c68 100644 --- a/templates/packages/details.html +++ b/templates/packages/details.html @@ -26,7 +26,7 @@ title="Testing package details for {{ tp.pkgname }}">{{ tp.pkgver }}-{{ tp.pkgrel }}</a> in testing</span></li> {% endif %}{% endwith %} - {% if user.is_authenticated %} + {% if perms.main.change_package %} <li><a href="unflag/" title="Unflag this package">Click here to unflag</a></li> <li><a href="unflag/all/" title="Unflag all matching pkgbase">Click here to unflag all split packages</a></li> {% endif %} @@ -40,7 +40,7 @@ <li><a href="download/" title="Download {{ pkg.pkgname }} from mirror">Download From Mirror</a></li> </ul> - {% if user.is_authenticated %} + {% if perms.main.change_package %} <form id="pkg-action" method="post" action="/packages/update/">{% csrf_token %} <div><input type="hidden" name="pkgid" value="{{ pkg.id }}" /></div> <p>{% if user in pkg.maintainers %} @@ -108,11 +108,11 @@ <td>{% if pkg.url %}<a href="{{ pkg.url }}" title="Visit the website for {{ pkg.pkgname }}">{{ pkg.url }}</a>{% endif %}</td> </tr><tr> - <th>License:</th> - <td>{{ pkg.license }}</td> + <th>License(s):</th> + <td>{{ pkg.licenses.all|join:", " }}</td> </tr><tr> <th>Groups:</th> - {% with pkg.packagegroup_set.all as groups %} + {% with pkg.groups.all as groups %} <td>{% if groups %} {% for g in groups %} <a href="/groups/{{ pkg.arch.name }}/{{ g.name }}/" @@ -159,16 +159,18 @@ {% if deps %} <ul> - {% for depend in deps %} - {% ifequal depend.pkg None %} - <li>{{ depend.dep.depname }} (virtual)</li> - {% else %} + {% for depend in deps %} + {% ifequal depend.pkg None %} + <li>{{ depend.dep.depname }} <span class="virtual-dep">(virtual)</span></li> + {% else %} <li><a href="{{ depend.pkg.get_absolute_url }}" - title="View package details for {{ depend.dep.depname }}">{{ depend.dep.depname }}</a> - {{ depend.dep.depvcmp }}{% if depend.pkg.repo.testing %} - <span class="testing-dep">(testing)</span>{% endif %}</li> - {% endifequal %} - {% endfor %} + title="View package details for {{ depend.dep.depname }}">{{ depend.dep.depname }}</a>{{ depend.dep.depvcmp|default:"" }} + {% if depend.pkg.repo.testing %}<span class="testing-dep">(testing)</span>{% endif %} + {% if depend.dep.optional %}<span class="opt-dep">(optional)</span>{% endif %} + {% if depend.dep.description %}- <span class="dep-desc">{{ depend.dep.description }}</span>{% endif %} + </li> + {% endifequal %} + {% endfor %} </ul> {% endif %} @@ -184,9 +186,11 @@ {% if rqdby %} <ul> {% for req in rqdby %} - <li><a href="{{req.get_absolute_url}}" - title="View package details for {{ req.pkgname }}">{{ req.pkgname }}</a> - {% if req.repo.testing %} (testing){% endif %}</li> + <li><a href="{{ req.pkg.get_absolute_url }}" + title="View package details for {{ req.pkg.pkgname }}">{{ req.pkg.pkgname }}</a> + {% if req.pkg.repo.testing %}<span class="testing-dep">(testing)</span>{% endif %} + {% if req.optional %}<span class="opt-dep">(optional)</span>{% endif %} + </li> {% endfor %} </ul> {% endif %} diff --git a/templates/packages/files-list.html b/templates/packages/files-list.html index 1c9ea635..bb89b663 100644 --- a/templates/packages/files-list.html +++ b/templates/packages/files-list.html @@ -5,7 +5,7 @@ of the package; it may be out of date.</p> {% if files.count %} <ul> {% for file in files %} - <li>{{ file.path }}</li> + <li>{{ file.directory }}{{ file.filename|default:'' }}</li> {% endfor %} </ul> {% else %} diff --git a/templates/packages/outofdate.txt b/templates/packages/outofdate.txt index d8b74005..93abea03 100644 --- a/templates/packages/outofdate.txt +++ b/templates/packages/outofdate.txt @@ -1,6 +1,4 @@ -{% autoescape off %}* Note: this is an automated message - -{{ email }} wants to notify you that the following package may be out-of-date: +{% autoescape off %}{{ email }} wants to notify you that the following package may be out-of-date: Package Name: {{ pkg.pkgname }} Architecture: {{ pkg.arch.name }} diff --git a/templates/packages/search.html b/templates/packages/search.html index 3f0d49c7..74f7ede3 100644 --- a/templates/packages/search.html +++ b/templates/packages/search.html @@ -71,7 +71,7 @@ <table class="results"> <thead> <tr> - {% if user.is_authenticated %} + {% if perms.main.change_package %} <th> </th> {% endif %} <th><a href="/packages/{% buildsortqs "arch" %}" @@ -91,7 +91,7 @@ <tbody> {% for pkg in package_list %} <tr class="{% cycle 'odd' 'even' %}"> - {% if user.is_authenticated %} + {% if perms.main.change_package %} <td><input type="checkbox" name="pkgid" value="{{ pkg.id }}" /></td> {% endif %} <td>{{ pkg.arch.name }}</td> @@ -134,7 +134,7 @@ </div> {% endif %} - {% if user.is_authenticated %} + {% if perms.main.change_package %} <p><input title="Adopt selected packages" type="submit" id="adopt-btn" name="adopt" value="Adopt Packages" /> <input title="Orphan selected packages" type="submit" id="disown-btn" diff --git a/templates/packages/stale_relations.html b/templates/packages/stale_relations.html new file mode 100644 index 00000000..8e2f8930 --- /dev/null +++ b/templates/packages/stale_relations.html @@ -0,0 +1,112 @@ +{% extends "base.html" %} +{% block title %}Arch Linux - Stale Package Relations{% endblock %} +{% block navbarclass %}anb-packages{% endblock %} + +{% block content %} +<div class="box"> + <h2>Stale Package Relations</h2> + + <form id="stale-relations-form" method="post" action="update/">{% csrf_token %} + <h3>Inactive User Relations ({{ inactive_user|length }})</h3> + + <table class="results" id="inactive-user"> + <thead> + <tr> + <th> </th> + <th>Package Base</th> + <th>Packages</th> + <th>User</th> + <th>Type</th> + </tr> + </thead> + <tbody> + {% for relation in inactive_user %} + <tr class="{% cycle 'odd' 'even' %}"> + <td><input type="checkbox" name="relation_id" value="{{ relation.id }}" /></td> + <td>{{ relation.pkgbase }}</td> + <td class="wrap">{% for pkg in relation.get_associated_packages %} + <a href="{{ pkg.get_absolute_url }}" + title="View package details for {{ pkg.pkgname }}">{{ pkg.repo|lower }}/{{ pkg.pkgname }} ({{ pkg.arch }})</a>{% if not forloop.last %}, {% endif %} + {% endfor %}</td> + <td>{{ relation.user.get_full_name }}</td> + <td>{{ relation.get_type_display }}</td> + </tr> + {% empty %} + <tr class="empty"><td colspan="5"><em>No inactive user relations.</em></td></tr> + {% endfor %} + </tbody> + </table> + + <h3>Relations with Non-existent <tt>pkgbase</tt> ({{ missing_pkgbase|length }})</h3> + + <table class="results" id="missing-pkgbase"> + <thead> + <tr> + <th> </th> + <th>Package Base</th> + <th>User</th> + <th>Type</th> + </tr> + </thead> + <tbody> + {% for relation in missing_pkgbase %} + <tr class="{% cycle 'odd' 'even' %}"> + <td><input type="checkbox" name="relation_id" value="{{ relation.id }}" /></td> + <td>{{ relation.pkgbase }}</td> + <td>{{ relation.user.get_full_name }}</td> + <td>{{ relation.get_type_display }}</td> + </tr> + {% empty %} + <tr class="empty"><td colspan="4"><em>No non-existent pkgbase relations.</em></td></tr> + {% endfor %} + </tbody> + </table> + + <h3>Maintainers with Wrong Permissions ({{ wrong_permissions|length }})</h3> + + <table class="results" id="wrong-permissions"> + <thead> + <tr> + <th> </th> + <th>Package Base</th> + <th>Packages</th> + <th>User</th> + <th>Allowed Repos</th> + <th>Currently in Repos</th> + </tr> + </thead> + <tbody> + {% for relation in wrong_permissions %} + <tr class="{% cycle 'odd' 'even' %}"> + <td><input type="checkbox" name="relation_id" value="{{ relation.id }}" /></td> + <td>{{ relation.pkgbase }}</td> + <td class="wrap">{% for pkg in relation.get_associated_packages %} + <a href="{{ pkg.get_absolute_url }}" + title="View package details for {{ pkg.pkgname }}">{{ pkg.repo|lower }}/{{ pkg.pkgname }} ({{ pkg.arch }})</a>{% if not forloop.last %}, {% endif %} + {% endfor %}</td> + <td>{{ relation.user.get_full_name }}</td> + <td class="wrap">{{ relation.user.userprofile.allowed_repos.all|join:", " }}</td> + <td class="wrap">{{ relation.repositories|join:", " }}</td> + </tr> + {% empty %} + <tr class="empty"><td colspan="6"><em>No relations with wrong permissions.</em></td></tr> + {% endfor %} + </tbody> + </table> + + <p><input title="Delete selected relations" type="submit" id="delete-relations" + name="delete" value="Delete Selected Relations" /> + </form> + +</div> +{% load cdn %}{% jquery %} +<script type="text/javascript" src="/media/jquery.tablesorter.min.js"></script> +<script type="text/javascript" src="/media/archweb.js"></script> +<script type="text/javascript"> +$(document).ready(function() { + $('#inactive-user:not(:has(tbody tr.empty))').tablesorter({widgets: ['zebra'], headers: { 0: { sorter: false } }, sortList: [[3,0]]}); + $('#missing-pkgbase:not(:has(tbody tr.empty))').tablesorter({widgets: ['zebra'], headers: { 0: { sorter: false } }, sortList: [[1,0]]}); +}); + $('#wrong-permissions:not(:has(tbody tr.empty))').tablesorter({widgets: ['zebra'], headers: { 0: { sorter: false } }, sortList: [[3,0]]}); +</script> +{% endblock %} diff --git a/templates/registration/logout.html b/templates/registration/logout.html index e2815cdc..e2e5449c 100644 --- a/templates/registration/logout.html +++ b/templates/registration/logout.html @@ -3,7 +3,9 @@ {% block content %} <div id="dev-logout" class="box"> - <p>Logout successful.<p> + <h2>Developer Logout</h2> + + <p>Logout was successful.<p> </div> {% endblock %} diff --git a/templates/todolists/email_notification.txt b/templates/todolists/email_notification.txt index abe1dbf3..1825912c 100644 --- a/templates/todolists/email_notification.txt +++ b/templates/todolists/email_notification.txt @@ -1,14 +1,9 @@ -{% autoescape off %}* Note: this is an automated message +{% autoescape off %}The todo list {{ todolist.name }} has had the following packages added to it for which you are a maintainer: -The following package: - - Package Name: {{ pkg.pkgname }} - Architecture: {{ pkg.arch.name }} - Repository: {{ pkg.repo.name }} - ({{ weburl }}) - -has been added to this todo list: +{% for tpkg in todo_packages %} +{{ tpkg.pkg.repo.name|lower }}/{{ tpkg.pkg.pkgname }} ({{ tpkg.pkg.arch.name }}) - {{ tpkg.pkg.get_full_url }}{% endfor %} +Todo list information: Creator: {{todolist.creator.get_full_name}} Name: {{todolist.name}} Description: diff --git a/templates/todolists/view.html b/templates/todolists/view.html index 046aed32..477e0180 100644 --- a/templates/todolists/view.html +++ b/templates/todolists/view.html @@ -38,6 +38,7 @@ <td>{{ pkg.pkg.repo.name|capfirst }}</td> <td>{{ pkg.pkg.maintainers|join:', ' }}</td> <td> + {% if perms.main.change_todolistpkg %} {% if pkg.complete %} <a href="/todo/flag/{{ list.id }}/{{ pkg.id }}/" class="status-link complete" title="Toggle completion status">Complete</a> @@ -45,6 +46,9 @@ <a href="/todo/flag/{{ list.id }}/{{ pkg.id }}/" class="status-link incomplete" title="Toggle completion status">Incomplete</a> {% endif %} + {% else %} + {% if pkg.complete %}<span class="complete">Complete</span>{% else %}<span class="incomplete">Incomplete</span>{% endif %} + {% endif %} </td> </tr> {% endfor %} diff --git a/todolists/views.py b/todolists/views.py index 519fae9d..6bd456ae 100644 --- a/todolists/views.py +++ b/todolists/views.py @@ -4,6 +4,7 @@ from django.http import HttpResponse from django.core.mail import send_mail from django.shortcuts import get_object_or_404, redirect from django.contrib.auth.decorators import login_required, permission_required +from django.db import transaction from django.db.models import Count from django.views.decorators.cache import never_cache from django.views.generic.create_update import delete_object @@ -13,11 +14,7 @@ from django.utils import simplejson from main.models import Todolist, TodolistPkg, Package -class TodoListForm(forms.Form): - name = forms.CharField(max_length=255, - widget=forms.TextInput(attrs={'size': '30'})) - description = forms.CharField(required=False, - widget=forms.Textarea(attrs={'rows': '4', 'cols': '60'})) +class TodoListForm(forms.ModelForm): packages = forms.CharField(required=False, help_text='(one per line)', widget=forms.Textarea(attrs={'rows': '20', 'cols': '60'})) @@ -26,13 +23,16 @@ class TodoListForm(forms.Form): package_names = [s.strip() for s in self.cleaned_data['packages'].split("\n")] package_names = set(package_names) - packages = Package.objects.filter( - pkgname__in=package_names).exclude( - repo__testing=True).order_by('arch') + packages = Package.objects.filter(pkgname__in=package_names).exclude( + repo__testing=True).select_related( + 'arch', 'repo').order_by('arch') return packages + class Meta: + model = Todolist + fields = ('name', 'description') -@login_required +@permission_required('main.change_todolistpkg') @never_cache def flag(request, listid, pkgid): list = get_object_or_404(Todolist, id=listid) @@ -68,23 +68,15 @@ def list(request): return direct_to_template(request, 'todolists/list.html', {'lists': lists}) -# TODO: this calls for transaction management and async emailing @permission_required('main.add_todolist') @never_cache def add(request): if request.POST: form = TodoListForm(request.POST) if form.is_valid(): - todo = Todolist.objects.create( - creator = request.user, - name = form.cleaned_data['name'], - description = form.cleaned_data['description']) - - for pkg in form.cleaned_data['packages']: - tpkg = TodolistPkg.objects.create(list=todo, pkg=pkg) - send_todolist_email(tpkg) - - return redirect('/todo/') + new_packages = create_todolist_packages(form, creator=request.user) + send_todolist_emails(form.instance, new_packages) + return redirect(form.instance) else: form = TodoListForm() @@ -101,33 +93,15 @@ def add(request): def edit(request, list_id): todo_list = get_object_or_404(Todolist, id=list_id) if request.POST: - form = TodoListForm(request.POST) + form = TodoListForm(request.POST, instance=todo_list) if form.is_valid(): - todo_list.name = form.cleaned_data['name'] - todo_list.description = form.cleaned_data['description'] - todo_list.save() - - packages = [p.pkg for p in todo_list.packages] - - # first delete any packages not in the new list - for p in todo_list.packages: - if p.pkg not in form.cleaned_data['packages']: - p.delete() - - # now add any packages not in the old list - for pkg in form.cleaned_data['packages']: - if pkg not in packages: - tpkg = TodolistPkg.objects.create( - list=todo_list, pkg=pkg) - send_todolist_email(tpkg) - + new_packages = create_todolist_packages(form) + send_todolist_emails(todo_list, new_packages) return redirect(todo_list) else: - form = TodoListForm(initial={ - 'name': todo_list.name, - 'description': todo_list.description, - 'packages': '\n'.join(todo_list.package_names), - }) + form = TodoListForm(instance=todo_list, + initial={ 'packages': '\n'.join(todo_list.package_names) }) + page_dict = { 'title': 'Edit Todo List: %s' % todo_list.name, 'form': form, @@ -142,25 +116,63 @@ def delete_todolist(request, object_id): template_name="todolists/todolist_confirm_delete.html", post_delete_redirect='/todo/') -def send_todolist_email(todo): - '''Sends an e-mail to the maintainer of a package notifying them that the - package has been added to a todo list''' - maints = todo.pkg.maintainers - if not maints: - return - page_dict = { - 'pkg': todo.pkg, - 'todolist': todo.list, - 'weburl': todo.pkg.get_full_url() - } - t = loader.get_template('todolists/email_notification.txt') - c = Context(page_dict) - send_mail('arch: Package [%s] added to Todolist' % todo.pkg.pkgname, - t.render(c), - 'Arch Website Notification <nobody@archlinux.org>', - [m.email for m in maints], - fail_silently=True) +@transaction.commit_on_success +def create_todolist_packages(form, creator=None): + packages = form.cleaned_data['packages'] + if creator: + # todo list is new + todolist = form.save(commit=False) + todolist.creator = creator + todolist.save() + + old_packages = [] + else: + # todo list already existed + form.save() + todolist = form.instance + # first delete any packages not in the new list + for todo_pkg in todolist.packages: + if todo_pkg.pkg not in packages: + todo_pkg.delete() + + # save the old package list so we know what to add + old_packages = [p.pkg for p in todolist.packages] + + todo_pkgs = [] + for package in packages: + if package not in old_packages: + todo_pkg = TodolistPkg.objects.create(list=todolist, pkg=package) + todo_pkgs.append(todo_pkg) + + return todo_pkgs + +def send_todolist_emails(todo_list, new_packages): + '''Sends emails to package maintainers notifying them that packages have + been added to a todo list.''' + # start by flipping the incoming list on its head: we want a list of + # involved maintainers and the packages they need to be notified about. + orphan_packages = [] + maint_packages = {} + for todo_package in new_packages: + maints = todo_package.pkg.maintainers.values_list('email', flat=True) + if not maints: + orphan_packages.append(todo_package) + else: + for maint in maints: + maint_packages.setdefault(maint, []).append(todo_package) + + for maint, packages in maint_packages.iteritems(): + c = Context({ + 'todo_packages': sorted(packages), + 'todolist': todo_list, + }) + t = loader.get_template('todolists/email_notification.txt') + send_mail('Packages added to todo list \'%s\'' % todo_list.name, + t.render(c), + 'Arch Website Notification <nobody@archlinux.org>', + [maint], + fail_silently=True) def public_list(request): todo_lists = Todolist.objects.incomplete() @@ -17,47 +17,24 @@ sitemaps = { } admin.autodiscover() - -urlpatterns = patterns('packages.views', - (r'^groups/$', 'groups'), - (r'^groups/(?P<arch>[A-z0-9]+)/$', 'groups'), - (r'^groups/(?P<arch>[A-z0-9]+)/(?P<name>[A-z0-9\-+.]+)/$', - 'group_details'), - - (r'^opensearch/packages/$', 'opensearch', {}, 'opensearch-packages'), -) - -urlpatterns += patterns('todolists.views', - (r'^todolists/$', 'public_list'), -) - -urlpatterns += patterns('mirrors.views', - (r'^mirrors/status/$', 'status', {}, 'mirror-status'), - (r'^mirrors/status/json/$', 'status_json', {}, 'mirror-status-json'), - - (r'^mirrors/$', 'mirrors', {}, 'mirrors-list'), - (r'^mirrors/(?P<name>[\.\-\w]+)/$', 'mirror_details'), - - (r'^mirrorlist/$', 'generate_mirrorlist', {}, 'mirrorlist'), - (r'^mirrorlist/all/$', 'find_mirrors', {'countries': ['all']}), - (r'^mirrorlist/all/ftp/$', 'find_mirrors', - {'countries': ['all'], 'protocols': ['ftp']}), - (r'^mirrorlist/all/http/$', 'find_mirrors', - {'countries': ['all'], 'protocols': ['http']}), -) - -# Feeds and sitemaps -urlpatterns += patterns('', - (r'^feeds/$', 'public.views.feeds', {}, 'feeds-list'), - (r'^feeds/news/$', NewsFeed()), - (r'^feeds/packages/$', PackageFeed()), - (r'^feeds/packages/(?P<arch>[A-z0-9]+)/$', +urlpatterns = [] + +# Feeds patterns, used later +feeds_patterns = patterns('', + (r'^$', 'public.views.feeds', {}, 'feeds-list'), + (r'^news/$', NewsFeed()), + (r'^packages/$', PackageFeed()), + (r'^packages/(?P<arch>[A-z0-9]+)/$', PackageFeed()), - (r'^feeds/packages/(?P<arch>[A-z0-9]+)/(?P<repo>[A-z0-9\-]+)/$', + (r'^packages/(?P<arch>[A-z0-9]+)/(?P<repo>[A-z0-9\-]+)/$', PackageFeed()), - (r'^sitemap.xml$', 'django.contrib.sitemaps.views.index', +) + +# Sitemaps +urlpatterns += patterns('django.contrib.sitemaps.views', + (r'^sitemap.xml$', 'index', {'sitemaps': sitemaps}), - (r'^sitemap-(?P<section>.+)\.xml$', 'django.contrib.sitemaps.views.sitemap', + (r'^sitemap-(?P<section>.+)\.xml$', 'sitemap', {'sitemaps': sitemaps}), ) @@ -65,12 +42,8 @@ urlpatterns += patterns('', urlpatterns += patterns('django.contrib.auth.views', (r'^login/$', 'login', { 'template_name': 'registration/login.html'}), - (r'^accounts/login/$', 'login', { - 'template_name': 'registration/login.html'}), (r'^logout/$', 'logout', { 'template_name': 'registration/logout.html'}), - (r'^accounts/logout/$', 'logout', { - 'template_name': 'registration/logout.html'}), ) # Public pages @@ -79,21 +52,27 @@ urlpatterns += patterns('public.views', (r'^about/$', direct_to_template, {'template': 'public/about.html'}, 'page-about'), (r'^art/$', direct_to_template, {'template': 'public/art.html'}, 'page-art'), (r'^svn/$', direct_to_template, {'template': 'public/svn.html'}, 'page-svn'), - (r'^hackers/$', 'userlist', { 'type':'Hackers' }, 'page-devs'), - (r'^fellows/$', 'userlist', { 'type':'Fellows' }, 'page-fellows'), + (r'^hackers/$', 'userlist', { 'type':'hackers' }, 'page-devs'), + (r'^fellows/$', 'userlist', { 'type':'fellows' }, 'page-fellows'), (r'^donate/$', 'donate', {}, 'page-donate'), (r'^download/$', 'download', {}, 'page-download'), ) # Includes and other remaining stuff urlpatterns += patterns('', - (r'^admin/', include(admin.site.urls)), - (r'^jsi18n/$', 'django.views.i18n.null_javascript_catalog'), - + (r'^jsi18n/$', 'django.views.i18n.null_javascript_catalog'), + (r'^admin/', include(admin.site.urls)), (r'^devel/', include('devel.urls')), + (r'^feeds/', include(feeds_patterns)), + (r'^groups/', include('packages.urls_groups')), + (r'^mirrorlist/',include('mirrors.urls_mirrorlist')), + (r'^mirrors/', include('mirrors.urls')), (r'^news/', include('news.urls')), (r'^packages/', include('packages.urls')), (r'^todo/', include('todolists.urls')), + (r'^opensearch/packages/$', 'packages.views.opensearch', + {}, 'opensearch-packages'), + (r'^todolists/$','todolists.views.public_list'), ) if settings.DEBUG == True: |