From 8c5358e88898c4eb620a132133c57a26f191dee1 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Tue, 15 Feb 2011 13:49:20 -0600 Subject: Use date from model in news feed Now that this a datetime and not just a date, we can use it directly. Signed-off-by: Dan McGee --- feeds.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/feeds.py b/feeds.py index cbcccd77..cdba9913 100644 --- a/feeds.py +++ b/feeds.py @@ -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() -- cgit v1.2.3-2-g168b From 376ce4a69e016d13eff28589a5caa627bf7c451b Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Mon, 7 Feb 2011 12:48:12 -0600 Subject: Clean up Package related objects code Main change is just to move groups from the default packagegroup_set location to a related_name of groups. Also refer to the Package class directly rather than by text string if we have it available. Signed-off-by: Dan McGee --- devel/management/commands/reporead.py | 4 ++-- main/models.py | 14 +++++++++----- packages/models.py | 5 ++++- packages/views.py | 3 +-- templates/packages/details.html | 2 +- 5 files changed, 17 insertions(+), 11 deletions(-) diff --git a/devel/management/commands/reporead.py b/devel/management/commands/reporead.py index e31478c5..bdd0882c 100644 --- a/devel/management/commands/reporead.py +++ b/devel/management/commands/reporead.py @@ -203,10 +203,10 @@ def populate_pkg(dbpkg, repopkg, force=False, timestamp=None): dbpkg.packagedepend_set.create(depname=dpname, depvcmp=dpvcmp) logger.debug('Added %s as dep for pkg %s', dpname, repopkg.name) - dbpkg.packagegroup_set.all().delete() + dbpkg.groups.all().delete() if 'groups' in repopkg.__dict__: for y in repopkg.groups: - dbpkg.packagegroup_set.create(name=y) + dbpkg.groups.create(name=y) def populate_files(dbpkg, repopkg, force=False): diff --git a/main/models.py b/main/models.py index ff2ecf02..dc73c986 100644 --- a/main/models.py +++ b/main/models.py @@ -309,14 +309,18 @@ class Signoff(models.Model): packager = models.ForeignKey(User) class PackageFile(models.Model): - pkg = models.ForeignKey('Package') + pkg = models.ForeignKey(Package) path = models.CharField(max_length=255) + + def __unicode__(self): + return self.path + class Meta: db_table = 'package_files' class PackageDepend(models.Model): - pkg = models.ForeignKey('Package') - depname = models.CharField(db_index=True, max_length=255) + pkg = models.ForeignKey(Package) + depname = models.CharField(max_length=255, db_index=True) depvcmp = models.CharField(max_length=255) class Meta: db_table = 'package_depends' @@ -349,8 +353,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/packages/models.py b/packages/models.py index 70ac4fe5..c217a692 100644 --- a/packages/models.py +++ b/packages/models.py @@ -25,7 +25,10 @@ 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 self.name + # vim: set ts=4 sw=4 et: diff --git a/packages/views.py b/packages/views.py index 4f7c3b93..9c34db0c 100644 --- a/packages/views.py +++ b/packages/views.py @@ -104,8 +104,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 diff --git a/templates/packages/details.html b/templates/packages/details.html index fcbaf083..de6b637f 100644 --- a/templates/packages/details.html +++ b/templates/packages/details.html @@ -112,7 +112,7 @@ {{ pkg.license }} Groups: - {% with pkg.packagegroup_set.all as groups %} + {% with pkg.groups.all as groups %} {% if groups %} {% for g in groups %} Date: Mon, 7 Feb 2011 13:05:59 -0600 Subject: Allow optional deps in depends model Signed-off-by: Dan McGee --- .../0038_add_depends_optional_description.py | 156 +++++++++++++++++++++ main/models.py | 6 + 2 files changed, 162 insertions(+) create mode 100644 main/migrations/0038_add_depends_optional_description.py 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/models.py b/main/models.py index dc73c986..56e5712d 100644 --- a/main/models.py +++ b/main/models.py @@ -322,6 +322,12 @@ class PackageDepend(models.Model): pkg = models.ForeignKey(Package) depname = models.CharField(max_length=255, db_index=True) depvcmp = models.CharField(max_length=255) + optional = models.BooleanField(default=False) + description = models.TextField(null=True, blank=True) + + def __unicode__(self): + return "%s%s" % (depname, depvcmp) + class Meta: db_table = 'package_depends' -- cgit v1.2.3-2-g168b From 4444f25d5cd9a9e1cb310a2d9c0b6b1ec1f55789 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Mon, 7 Feb 2011 13:45:05 -0600 Subject: Move license to a related model This allows us to store multiple licenses per package in a more elegant fashion, and will later allow us to search and filter on this information. Signed-off-by: Dan McGee --- devel/management/commands/reporead.py | 11 +- .../0039_auto__del_field_package_license.py | 157 +++++++++++++++++++++ main/models.py | 1 - packages/migrations/0004_auto__add_license.py | 118 ++++++++++++++++ packages/migrations/0005_move_license_data.py | 120 ++++++++++++++++ packages/models.py | 10 ++ templates/packages/details.html | 4 +- 7 files changed, 413 insertions(+), 8 deletions(-) create mode 100644 main/migrations/0039_auto__del_field_package_license.py create mode 100644 packages/migrations/0004_auto__add_license.py create mode 100644 packages/migrations/0005_move_license_data.py diff --git a/devel/management/commands/reporead.py b/devel/management/commands/reporead.py index bdd0882c..9b99e0f7 100644 --- a/devel/management/commands/reporead.py +++ b/devel/management/commands/reporead.py @@ -79,14 +79,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 +93,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': @@ -166,7 +163,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 @@ -208,6 +204,11 @@ def populate_pkg(dbpkg, repopkg, force=False, timestamp=None): for y in repopkg.groups: dbpkg.groups.create(name=y) + dbpkg.licenses.all().delete() + if 'license' in repopkg.__dict__: + for y in repopkg.license: + dbpkg.licenses.create(name=y) + def populate_files(dbpkg, repopkg, force=False): if not force: 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/models.py b/main/models.py index 56e5712d..b1813c3c 100644 --- a/main/models.py +++ b/main/models.py @@ -117,7 +117,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) 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 c217a692..5aa213d1 100644 --- a/packages/models.py +++ b/packages/models.py @@ -31,4 +31,14 @@ class PackageGroup(models.Model): def __unicode__(self): return self.name +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'] + # vim: set ts=4 sw=4 et: diff --git a/templates/packages/details.html b/templates/packages/details.html index de6b637f..14b657e3 100644 --- a/templates/packages/details.html +++ b/templates/packages/details.html @@ -108,8 +108,8 @@ {% if pkg.url %}{{ pkg.url }}{% endif %} - License: - {{ pkg.license }} + License(s): + {{ pkg.licenses.all|join:", " }} Groups: {% with pkg.groups.all as groups %} -- cgit v1.2.3-2-g168b From 7f1c7b08227e49172734f09552ceae8bc1f685ad Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Tue, 15 Feb 2011 19:31:56 -0600 Subject: Read in optional deps and show in web interface Signed-off-by: Dan McGee --- devel/management/commands/reporead.py | 36 ++++++++++++++++++++++------------- main/models.py | 6 +++--- media/archweb.css | 4 ++++ templates/packages/details.html | 25 +++++++++++++----------- 4 files changed, 44 insertions(+), 27 deletions(-) diff --git a/devel/management/commands/reporead.py b/devel/management/commands/reporead.py index 9b99e0f7..f3ec50e8 100644 --- a/devel/management/commands/reporead.py +++ b/devel/management/commands/reporead.py @@ -29,7 +29,7 @@ from optparse import make_option from logging import ERROR, WARNING, INFO, DEBUG -from main.models import Arch, Package, Repo +from main.models import Arch, Package, PackageDepend, Repo logging.basicConfig( level=WARNING, @@ -155,6 +155,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 @@ -188,24 +202,20 @@ 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.groups.all().delete() - if 'groups' in repopkg.__dict__: + if hasattr(repopkg, 'groups'): for y in repopkg.groups: dbpkg.groups.create(name=y) dbpkg.licenses.all().delete() - if 'license' in repopkg.__dict__: + if hasattr(repopkg, 'license'): for y in repopkg.license: dbpkg.licenses.create(name=y) @@ -223,7 +233,7 @@ 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) diff --git a/main/models.py b/main/models.py index b1813c3c..dafbb1eb 100644 --- a/main/models.py +++ b/main/models.py @@ -209,7 +209,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: @@ -320,12 +320,12 @@ class PackageFile(models.Model): class PackageDepend(models.Model): pkg = models.ForeignKey(Package) depname = models.CharField(max_length=255, db_index=True) - depvcmp = models.CharField(max_length=255) + 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" % (depname, depvcmp) + return "%s%s" % (self.depname, self.depvcmp) class Meta: db_table = 'package_depends' diff --git a/media/archweb.css b/media/archweb.css index d45ea10b..47abba7b 100644 --- a/media/archweb.css +++ b/media/archweb.css @@ -216,6 +216,10 @@ form#flag-pkg-form textarea, form#flag-pkg-form input[type=text] { width: 45%; } #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; } diff --git a/templates/packages/details.html b/templates/packages/details.html index 14b657e3..ac997184 100644 --- a/templates/packages/details.html +++ b/templates/packages/details.html @@ -159,16 +159,18 @@ {% if deps %}
    - {% for depend in deps %} - {% ifequal depend.pkg None %} -
  • {{ depend.dep.depname }} (virtual)
  • - {% else %} + {% for depend in deps %} + {% ifequal depend.pkg None %} +
  • {{ depend.dep.depname }} (virtual)
  • + {% else %}
  • {{ depend.dep.depname }} - {{ depend.dep.depvcmp }}{% if depend.pkg.repo.testing %} - (testing){% endif %}
  • - {% endifequal %} - {% endfor %} + title="View package details for {{ depend.dep.depname }}">{{ depend.dep.depname }}{{ depend.dep.depvcmp|default:"" }} + {% if depend.pkg.repo.testing %}(testing){% endif %} + {% if depend.dep.optional %}(optional){% endif %} + {% if depend.dep.description %}{{ depend.dep.description }}{% endif %} + + {% endifequal %} + {% endfor %}
{% endif %} @@ -184,9 +186,10 @@ {% if rqdby %}
    {% for req in rqdby %} -
  • {{ req.pkgname }} - {% if req.repo.testing %} (testing){% endif %}
  • + {% if req.repo.testing %}(testing){% endif %} + {% endfor %}
{% endif %} -- cgit v1.2.3-2-g168b From 8d3d05c7cb81611537aa34fa68e98e5e22b74847 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Tue, 15 Feb 2011 20:00:33 -0600 Subject: Allow for optional info in required by display We need to make our root object the PackageDepend rather than the Package to get at this, so do a slight refactor on get_requiredby(). Signed-off-by: Dan McGee --- main/models.py | 31 ++++++++++++++++++------------- templates/packages/details.html | 7 ++++--- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/main/models.py b/main/models.py index dafbb1eb..73a7620d 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( @@ -173,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, @@ -189,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) diff --git a/templates/packages/details.html b/templates/packages/details.html index ac997184..09b970cd 100644 --- a/templates/packages/details.html +++ b/templates/packages/details.html @@ -186,9 +186,10 @@ {% if rqdby %}
    {% for req in rqdby %} -
  • {{ req.pkgname }} - {% if req.repo.testing %}(testing){% endif %} +
  • {{ req.pkg.pkgname }} + {% if req.pkg.repo.testing %}(testing){% endif %} + {% if req.optional %}(optional){% endif %}
  • {% endfor %}
-- cgit v1.2.3-2-g168b From ed4eca37fc7680a7f88d213af68b740f046aad17 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Fri, 18 Feb 2011 16:25:53 -0600 Subject: Add unicode methods for packages models Signed-off-by: Dan McGee --- packages/models.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/models.py b/packages/models.py index 5aa213d1..bc36f787 100644 --- a/packages/models.py +++ b/packages/models.py @@ -17,6 +17,11 @@ 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 __unicode__(self): + return "%s: %s (%s)" % ( + self.pkgbase, self.user, self.get_type_display()) + class Meta: unique_together = (('pkgbase', 'user', 'type'),) @@ -29,7 +34,7 @@ class PackageGroup(models.Model): name = models.CharField(max_length=255) def __unicode__(self): - return self.name + return "%s: %s" % (name, pkg) class License(models.Model): pkg = models.ForeignKey('main.Package', related_name='licenses') -- cgit v1.2.3-2-g168b From eb97b0400b7323540896b98ac0eddbd7b4373241 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Fri, 18 Feb 2011 16:26:27 -0600 Subject: Add a PackageRelation admin Signed-off-by: Dan McGee --- packages/admin.py | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 packages/admin.py 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: -- cgit v1.2.3-2-g168b From 3fb20c942da5afece6f8717a9c3bf878e18b508a Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Fri, 18 Feb 2011 16:35:54 -0600 Subject: Remove maintainer relations if user marked inactive These users are being marked inactive because they are no longer developers; thus they should have all of their maintainer relations removed from the database. This is one of two causes of "orphan" package relation objects, the other being pkgbase values that go out of existence. Signed-off-by: Dan McGee --- packages/models.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/packages/models.py b/packages/models.py index bc36f787..0afdee00 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): @@ -46,4 +47,15 @@ class License(models.Model): 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: -- cgit v1.2.3-2-g168b From 330048eab6cf9bacf2d7bb436a101a3b7469aca7 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Fri, 18 Feb 2011 23:53:01 -0600 Subject: Unify calls to applicable_arches() Invoke the function everywhere it is used rather than passing a callable. Signed-off-by: Dan McGee --- main/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main/models.py b/main/models.py index 73a7620d..b7ab8057 100644 --- a/main/models.py +++ b/main/models.py @@ -264,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): -- cgit v1.2.3-2-g168b From b9fdcd06222c674d5fabcf5a4ab6bc55f268c757 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Tue, 22 Feb 2011 15:29:08 -0600 Subject: Modularize URLs Make some additional URL config files that can be included so we aren't trying to do so much in the top level config. This also allows us to branch a bit more rather than go linear down the rather lengthy list. Signed-off-by: Dan McGee --- mirrors/urls.py | 10 +++++++ mirrors/urls_mirrorlist.py | 12 +++++++++ packages/urls_groups.py | 9 +++++++ urls.py | 65 +++++++++++++++++----------------------------- 4 files changed, 55 insertions(+), 41 deletions(-) create mode 100644 mirrors/urls.py create mode 100644 mirrors/urls_mirrorlist.py create mode 100644 packages/urls_groups.py 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[\.\-\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/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[A-z0-9]+)/$', 'groups'), + (r'^(?P[A-z0-9]+)/(?P[A-z0-9\-+.]+)/$', 'group_details'), +) + +# vim: set ts=4 sw=4 et: diff --git a/urls.py b/urls.py index f18500fd..da937666 100644 --- a/urls.py +++ b/urls.py @@ -17,47 +17,24 @@ sitemaps = { } admin.autodiscover() - -urlpatterns = patterns('packages.views', - (r'^groups/$', 'groups'), - (r'^groups/(?P[A-z0-9]+)/$', 'groups'), - (r'^groups/(?P[A-z0-9]+)/(?P[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[\.\-\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[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[A-z0-9]+)/$', PackageFeed()), - (r'^feeds/packages/(?P[A-z0-9]+)/(?P[A-z0-9\-]+)/$', + (r'^packages/(?P[A-z0-9]+)/(?P[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
.+)\.xml$', 'django.contrib.sitemaps.views.sitemap', + (r'^sitemap-(?P
.+)\.xml$', 'sitemap', {'sitemaps': sitemaps}), ) @@ -88,13 +65,19 @@ urlpatterns += patterns('public.views', # 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: -- cgit v1.2.3-2-g168b From fc7fc1d10a13e9b21d222435ba12affd1d08822f Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Wed, 16 Feb 2011 21:51:23 -0600 Subject: Slight tweaks to mirror commands We know we are doing updates when setting IPv4/IPv6 information, so set force_update to True to save the useless select query on each save(). For mirror checks, use a less cumbersome deque for the results since it is also thread-safe, and have all the log entries committed in one go. Signed-off-by: Dan McGee --- mirrors/management/commands/mirrorcheck.py | 17 ++++++++--------- mirrors/management/commands/mirrorresolv.py | 2 +- 2 files changed, 9 insertions(+), 10 deletions(-) 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..77e7a223 100644 --- a/mirrors/management/commands/mirrorresolv.py +++ b/mirrors/management/commands/mirrorresolv.py @@ -50,7 +50,7 @@ def resolve_mirrors(): mirrorurl.has_ipv6 = socket.AF_INET6 in families logger.debug("%s: v4: %s v6: %s", 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) -- cgit v1.2.3-2-g168b From 838b36f0a65dd58d49ca3541fb8abaeb72529683 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Tue, 21 Dec 2010 21:23:24 -0600 Subject: Add new file and directory parts to package files Signed-off-by: Dan McGee --- main/migrations/0040_split_package_files.py | 166 ++++++++++++++++++++++++++++ main/models.py | 3 + 2 files changed, 169 insertions(+) create mode 100644 main/migrations/0040_split_package_files.py 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/models.py b/main/models.py index b7ab8057..ed136759 100644 --- a/main/models.py +++ b/main/models.py @@ -315,6 +315,9 @@ class Signoff(models.Model): class PackageFile(models.Model): pkg = models.ForeignKey(Package) path = models.CharField(max_length=255) + 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 self.path -- cgit v1.2.3-2-g168b From eeff0749d86ec403e55dc626034991638edad619 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Tue, 21 Dec 2010 21:23:55 -0600 Subject: Add migration to split package files into parts This datamigration is a bit more tricky and we do some DB-specific stuff so it can be done a lot faster- we are dealing with millions of rows in this migration in production. Signed-off-by: Dan McGee --- main/migrations/0041_move_package_files_data.py | 186 ++++++++++++++++++++++++ 1 file changed, 186 insertions(+) create mode 100644 main/migrations/0041_move_package_files_data.py 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'] -- cgit v1.2.3-2-g168b From 4b12255d1cf52fcc1a98c230d940d0c1d3809ad2 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Tue, 21 Dec 2010 21:34:40 -0600 Subject: Use new split package file fields everywhere Signed-off-by: Dan McGee --- devel/management/commands/reporead.py | 10 +- .../0042_auto__del_field_packagefile_path.py | 158 +++++++++++++++++++++ main/models.py | 3 +- packages/views.py | 2 +- templates/packages/files-list.html | 2 +- 5 files changed, 169 insertions(+), 6 deletions(-) create mode 100644 main/migrations/0042_auto__del_field_packagefile_path.py diff --git a/devel/management/commands/reporead.py b/devel/management/commands/reporead.py index f3ec50e8..72595c63 100644 --- a/devel/management/commands/reporead.py +++ b/devel/management/commands/reporead.py @@ -237,8 +237,14 @@ def populate_files(dbpkg, repopkg, force=False): 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 + dbpkg.packagefile_set.create( + is_directory=(filename is None), + directory=dirname + '/', + filename=filename) dbpkg.files_last_update = datetime.now() dbpkg.save() 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 ed136759..a7cc2335 100644 --- a/main/models.py +++ b/main/models.py @@ -314,13 +314,12 @@ class Signoff(models.Model): class PackageFile(models.Model): pkg = models.ForeignKey(Package) - path = models.CharField(max_length=255) 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 self.path + return "%s%s" % (self.directory, self.filename or '') class Meta: db_table = 'package_files' diff --git a/packages/views.py b/packages/views.py index 9c34db0c..e792175b 100644 --- a/packages/views.py +++ b/packages/views.py @@ -234,7 +234,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' 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.

{% if files.count %}
    {% for file in files %} -
  • {{ file.path }}
  • +
  • {{ file.directory }}{{ file.filename|default:'' }}
  • {% endfor %}
{% else %} -- cgit v1.2.3-2-g168b From dfc4d919f1b0349d5143764c3f8f62c240e50623 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Tue, 22 Feb 2011 17:24:09 -0600 Subject: Use hyphen to offset optdep description Signed-off-by: Dan McGee --- templates/packages/details.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/packages/details.html b/templates/packages/details.html index 09b970cd..ea5e528c 100644 --- a/templates/packages/details.html +++ b/templates/packages/details.html @@ -167,7 +167,7 @@ title="View package details for {{ depend.dep.depname }}">{{ depend.dep.depname }}{{ depend.dep.depvcmp|default:"" }} {% if depend.pkg.repo.testing %}(testing){% endif %} {% if depend.dep.optional %}(optional){% endif %} - {% if depend.dep.description %}{{ depend.dep.description }}{% endif %} + {% if depend.dep.description %}- {{ depend.dep.description }}{% endif %} {% endifequal %} {% endfor %} -- cgit v1.2.3-2-g168b From f6c41b273c8962718b303c6050c2fd8bcea533a8 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Wed, 23 Feb 2011 09:46:54 -0600 Subject: reporead performance improvements When importing over a million files, it makes sense to take the slightly faster route and call the PackageFile() constructor directly rather than going through the related manager's create method. We can also get huge performance improvements, especially with files databases, by using the 'io' rather than 'codecs' module. The former is now implemented in C in 2.7 and results in a no-work import (so measuring only the DB read speed) of extra.files.tar.gz from ~30 seconds to ~5 seconds. Signed-off-by: Dan McGee --- devel/management/commands/reporead.py | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/devel/management/commands/reporead.py b/devel/management/commands/reporead.py index 72595c63..bda3bd61 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, PackageDepend, Repo +from main.models import Arch, Package, PackageDepend, PackageFile, Repo logging.basicConfig( level=WARNING, @@ -241,10 +249,13 @@ def populate_files(dbpkg, repopkg, force=False): dirname, filename = f.rsplit('/', 1) if filename == '': filename = None - dbpkg.packagefile_set.create( + # 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() @@ -394,7 +405,11 @@ def parse_repo(repopath): 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)) -- cgit v1.2.3-2-g168b From 3181e970ce9dcc4fd996499ee536e4c2454e89dd Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Wed, 23 Feb 2011 12:09:29 -0600 Subject: Add stale package relations status screen For now it is read only. Display a few tables of various ways of detecting stale package relations. These include inactive users, pkgbase values that no longer exist, and users that are listed as maintainers that don't have the proper permissions for that package anymore. Signed-off-by: Dan McGee --- packages/models.py | 10 ++++ packages/urls.py | 1 + packages/utils.py | 24 +++++++- packages/views.py | 21 ++++++- templates/packages/stale_relations.html | 101 ++++++++++++++++++++++++++++++++ 5 files changed, 154 insertions(+), 3 deletions(-) create mode 100644 templates/packages/stale_relations.html diff --git a/packages/models.py b/packages/models.py index 0afdee00..5dbdea45 100644 --- a/packages/models.py +++ b/packages/models.py @@ -19,6 +19,16 @@ class PackageRelation(models.Model): 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()) diff --git a/packages/urls.py b/packages/urls.py index b7ce5c74..37ce23c0 100644 --- a/packages/urls.py +++ b/packages/urls.py @@ -25,6 +25,7 @@ urlpatterns = patterns('packages.views', (r'^(?P\d+)/$', 'search'), (r'^differences/$', 'arch_differences'), + (r'^stale_relations/$', 'stale_relations'), (r'^(?P[A-z0-9\-+.]+)/$', 'details'), 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 e792175b..9a2094aa 100644 --- a/packages/views.py +++ b/packages/views.py @@ -2,7 +2,7 @@ from django import forms from django.contrib import messages from django.contrib.admin.widgets import AdminDateWidget from django.contrib.auth.models import User -from django.contrib.auth.decorators import permission_required +from django.contrib.auth.decorators import login_required, permission_required from django.conf import settings from django.core.mail import send_mail from django.db.models import Q @@ -23,7 +23,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(): @@ -401,4 +401,21 @@ def arch_differences(request): } return direct_to_template(request, 'packages/differences.html', context) +@login_required +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) + # vim: set ts=4 sw=4 et: diff --git a/templates/packages/stale_relations.html b/templates/packages/stale_relations.html new file mode 100644 index 00000000..975ef1b6 --- /dev/null +++ b/templates/packages/stale_relations.html @@ -0,0 +1,101 @@ +{% extends "base.html" %} +{% block title %}Arch Linux - Stale Package Relations{% endblock %} +{% block navbarclass %}anb-packages{% endblock %} + +{% block content %} +
+

Stale Package Relations

+ +

Inactive User Relations ({{ inactive_user|length }})

+ + + + + + + + + + + + {% for relation in inactive_user %} + + + + + + + {% empty %} + + {% endfor %} + +
Package BasePackagesUserType
{{ relation.pkgbase }}{% for pkg in relation.get_associated_packages %} + {{ pkg.repo|lower }}/{{ pkg.pkgname }} ({{ pkg.arch }}){% if not forloop.last %}, {% endif %} + {% endfor %}{{ relation.user.get_full_name }}{{ relation.get_type_display }}
No inactive user relations.
+ +

Relations with Non-existent pkgbase ({{ missing_pkgbase|length }})

+ + + + + + + + + + + {% for relation in missing_pkgbase %} + + + + + + {% empty %} + + {% endfor %} + +
Package BaseUserType
{{ relation.pkgbase }}{{ relation.user.get_full_name }}{{ relation.get_type_display }}
No non-existent pkgbase relations.
+ +

Maintainers with Wrong Permissions ({{ wrong_permissions|length }})

+ + + + + + + + + + + + + {% for relation in wrong_permissions %} + + + + + + + + {% empty %} + + {% endfor %} + +
Package BasePackagesUserAllowed ReposCurrently in Repos
{{ relation.pkgbase }}{% for pkg in relation.get_associated_packages %} + {{ pkg.repo|lower }}/{{ pkg.pkgname }} ({{ pkg.arch }}){% if not forloop.last %}, {% endif %} + {% endfor %}{{ relation.user.get_full_name }}{{ relation.user.userprofile.allowed_repos.all|join:", " }}{{ relation.repositories|join:", " }}
No relations with wrong permissions.
+ +
+{% load cdn %}{% jquery %} + + + +{% endblock %} -- cgit v1.2.3-2-g168b From 93bca8b0ed79afc30f6237e13dacaf32ed8cd4b3 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Wed, 23 Feb 2011 12:36:49 -0600 Subject: Allow deleting of stale package relations via status page Add a column of checkboxes to each table, enclose the whole thing in a form, and add a super-simple delete view that takes a list of IDs and removes them from the database. The delete_packagerelation permission is required to be able to delete relations. Signed-off-by: Dan McGee --- packages/urls.py | 1 + packages/views.py | 13 +++++++++++++ templates/packages/stale_relations.html | 23 +++++++++++++++++------ 3 files changed, 31 insertions(+), 6 deletions(-) diff --git a/packages/urls.py b/packages/urls.py index 37ce23c0..638a370a 100644 --- a/packages/urls.py +++ b/packages/urls.py @@ -26,6 +26,7 @@ urlpatterns = patterns('packages.views', (r'^differences/$', 'arch_differences'), (r'^stale_relations/$', 'stale_relations'), + (r'^stale_relations/update/$','stale_relations_update'), (r'^(?P[A-z0-9\-+.]+)/$', 'details'), diff --git a/packages/views.py b/packages/views.py index 9a2094aa..1ab04258 100644 --- a/packages/views.py +++ b/packages/views.py @@ -11,6 +11,7 @@ from django.shortcuts import get_object_or_404, redirect from django.template import loader, Context, RequestContext 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 @@ -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 @@ -418,4 +420,15 @@ def stale_relations(request): } 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/templates/packages/stale_relations.html b/templates/packages/stale_relations.html index 975ef1b6..8e2f8930 100644 --- a/templates/packages/stale_relations.html +++ b/templates/packages/stale_relations.html @@ -6,11 +6,13 @@

Stale Package Relations

+
{% csrf_token %}

Inactive User Relations ({{ inactive_user|length }})

+ @@ -20,6 +22,7 @@ {% for relation in inactive_user %} + {% empty %} - + {% endfor %}
  Package Base Packages User
{{ relation.pkgbase }} {% for pkg in relation.get_associated_packages %} {{ relation.get_type_display }}
No inactive user relations.
No inactive user relations.
@@ -39,6 +42,7 @@ + @@ -47,12 +51,13 @@ {% for relation in missing_pkgbase %} + {% empty %} - + {% endfor %}
  Package Base User Type
{{ relation.pkgbase }} {{ relation.user.get_full_name }} {{ relation.get_type_display }}
No non-existent pkgbase relations.
No non-existent pkgbase relations.
@@ -62,6 +67,7 @@ + @@ -72,6 +78,7 @@ {% for relation in wrong_permissions %} + {% empty %} - + {% endfor %}
  Package Base Packages User
{{ relation.pkgbase }} {% for pkg in relation.get_associated_packages %} {{ relation.repositories|join:", " }}
No relations with wrong permissions.
No relations with wrong permissions.
+

+

+
{% load cdn %}{% jquery %} {% endblock %} -- cgit v1.2.3-2-g168b From 02e9c4b8f3f005af2a39a1927dd6d693fa4238f0 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Sun, 27 Feb 2011 10:52:59 -0600 Subject: reporead: small cleanups --- devel/management/commands/reporead.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/devel/management/commands/reporead.py b/devel/management/commands/reporead.py index bda3bd61..09e48559 100644 --- a/devel/management/commands/reporead.py +++ b/devel/management/commands/reporead.py @@ -391,16 +391,12 @@ 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 -- cgit v1.2.3-2-g168b From 1fe833e18d2f7db563302f18f71e3a07e27b169c Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Sun, 27 Feb 2011 11:42:27 -0600 Subject: Screen Fellows based on group membership as well Signed-off-by: Dan McGee --- public/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/views.py b/public/views.py index 7d10e74f..551e1e18 100644 --- a/public/views.py +++ b/public/views.py @@ -26,7 +26,7 @@ def userlist(request, type='Developers'): users = users.filter(is_active=True, groups__name="Trusted Users") msg = "Here are all your friendly Arch Linux Trusted Users who are in charge of the [community] repository." elif type == 'Fellows': - users = users.filter(is_active=False) + users = users.filter(is_active=False, groups__name__in=["Developers", "Trusted Users"]) msg = "Below you can find a list of ex-developers (aka project fellows). These folks helped make Arch what it is today. Thanks!" context = { -- cgit v1.2.3-2-g168b From 5cd223680e35e90bfc39ae22a4638204d0beaa98 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Sun, 27 Feb 2011 11:52:27 -0600 Subject: Slight refactor of user list views Signed-off-by: Dan McGee --- public/views.py | 36 ++++++++++++++++++++++++------------ urls.py | 6 +++--- 2 files changed, 27 insertions(+), 15 deletions(-) diff --git a/public/views.py b/public/views.py index 551e1e18..46291b88 100644 --- a/public/views.py +++ b/public/views.py @@ -5,6 +5,7 @@ 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 @@ -17,23 +18,34 @@ def index(request): } return direct_to_template(request, 'public/index.html', context) -def userlist(request, type='Developers'): +USER_LISTS = { + 'devs': { + 'user_type': 'Developers', + 'description': "This is a list of the current Arch Linux Developers. They maintain the [core] and [extra] package repositories in addition to doing any other developer duties.", + }, + 'tus': { + 'user_type': 'Trusted Users', + 'description': "Here are all your friendly Arch Linux Trusted Users who are in charge of the [community] repository.", + }, + 'fellows': { + 'user_type': 'Fellows', + 'description': "Below you can find a list of ex-developers (aka project fellows). These folks helped make Arch what it is today. Thanks!", + }, +} + +def userlist(request, type='devs'): users = User.objects.order_by('username').select_related('userprofile') - if type == 'Developers': + if type == 'devs': users = users.filter(is_active=True, groups__name="Developers") - msg = "This is a list of the current Arch Linux Developers. They maintain the [core] and [extra] package repositories in addition to doing any other developer duties." - elif type == 'Trusted Users': + elif type == 'tus': users = users.filter(is_active=True, groups__name="Trusted Users") - msg = "Here are all your friendly Arch Linux Trusted Users who are in charge of the [community] repository." - elif type == 'Fellows': + elif type == 'fellows': users = users.filter(is_active=False, groups__name__in=["Developers", "Trusted Users"]) - msg = "Below you can find a list of ex-developers (aka project fellows). These folks helped make Arch what it is today. Thanks!" + 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): diff --git a/urls.py b/urls.py index da937666..3608da67 100644 --- a/urls.py +++ b/urls.py @@ -56,9 +56,9 @@ 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'^developers/$', 'userlist', { 'type':'Developers' }, 'page-devs'), - (r'^trustedusers/$', 'userlist', { 'type':'Trusted Users' }, 'page-tus'), - (r'^fellows/$', 'userlist', { 'type':'Fellows' }, 'page-fellows'), + (r'^developers/$', 'userlist', { 'type':'devs' }, 'page-devs'), + (r'^trustedusers/$', 'userlist', { 'type':'tus' }, 'page-tus'), + (r'^fellows/$', 'userlist', { 'type':'fellows' }, 'page-fellows'), (r'^donate/$', 'donate', {}, 'page-donate'), (r'^download/$', 'download', {}, 'page-download'), ) -- cgit v1.2.3-2-g168b From 47622e62938e629cfe85457f9a36d5f9b87987d5 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Sun, 27 Feb 2011 11:54:21 -0600 Subject: Remove test_packages fixture This is very much out of date at this point, so kill it. It might make an appearance in the future in a more slimmed down version. Signed-off-by: Dan McGee --- main/fixtures/test_packages.json | 11118 ------------------------------------- 1 file changed, 11118 deletions(-) delete mode 100644 main/fixtures/test_packages.json 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 - } - } -] -- cgit v1.2.3-2-g168b From 7cdf2b698173add6707fb943f939a5ff9a2eab25 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Sun, 27 Feb 2011 11:55:59 -0600 Subject: Update repos fixture Signed-off-by: Dan McGee --- main/fixtures/repos.json | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/main/fixtures/repos.json b/main/fixtures/repos.json index bc474d3e..fae96f85 100644 --- a/main/fixtures/repos.json +++ b/main/fixtures/repos.json @@ -49,6 +49,16 @@ "bugs_project": 5 } }, + { + "pk": 8, + "model": "main.repo", + "fields": { + "svn_root": "community", + "testing": true, + "name": "Multilib-Testing", + "bugs_project": 5 + } + }, { "pk": 3, "model": "main.repo", @@ -59,4 +69,4 @@ "bugs_project": 1 } } -] +] \ No newline at end of file -- cgit v1.2.3-2-g168b From b86b71f97d2c53e7f74ab5b048e5603b495601ad Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Sun, 27 Feb 2011 11:59:34 -0600 Subject: Add a default initial groups fixture Signed-off-by: Dan McGee --- README | 1 + main/fixtures/groups.json | 198 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 199 insertions(+) create mode 100644 main/fixtures/groups.json diff --git a/README b/README index 6b492d84..3e315388 100644 --- a/README +++ b/README @@ -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/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 -- cgit v1.2.3-2-g168b From db1524fd64e8b5c0f43cfed7643034ee764f55fd Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Sun, 27 Feb 2011 12:31:06 -0600 Subject: Auto map the protocol URL field And perform better validation when doing so. Signed-off-by: Dan McGee --- mirrors/admin.py | 20 ++++++++++++++++---- mirrors/models.py | 14 +++++++++++++- 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/mirrors/admin.py b/mirrors/admin.py index 6990cca2..f6a72cf0 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',) extra = 3 # ripped off from django.forms.fields, adding netmask ability diff --git a/mirrors/models.py b/mirrors/models.py index e070b1cd..b763fb63 100644 --- a/mirrors/models.py +++ b/mirrors/models.py @@ -1,4 +1,7 @@ from django.db import models +from django.core.exceptions import ValidationError + +from urlparse import urlparse TIER_CHOICES = ( (0, 'Tier 0'), @@ -50,11 +53,20 @@ class MirrorProtocol(models.Model): 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) + 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) + def __unicode__(self): return self.url -- cgit v1.2.3-2-g168b From 6d5909ca5dc8934cacd969e964573989dc6b0417 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Sun, 27 Feb 2011 12:44:30 -0600 Subject: Auto-resolve mirror URLs on save This prevents people from having to mess with these checkboxes at all in the admin, and we incur no delay on their initial values being correct waiting for the cron job to run. Signed-off-by: Dan McGee --- mirrors/admin.py | 2 +- mirrors/management/commands/mirrorresolv.py | 9 +++------ mirrors/models.py | 25 +++++++++++++++++++++++-- 3 files changed, 27 insertions(+), 9 deletions(-) diff --git a/mirrors/admin.py b/mirrors/admin.py index f6a72cf0..b9c2876a 100644 --- a/mirrors/admin.py +++ b/mirrors/admin.py @@ -29,7 +29,7 @@ class MirrorUrlForm(forms.ModelForm): class MirrorUrlInlineAdmin(admin.TabularInline): model = MirrorUrl form = MirrorUrlForm - readonly_fields = ('protocol',) + readonly_fields = ('protocol', 'has_ipv4', 'has_ipv6') extra = 3 # ripped off from django.forms.fields, adding netmask ability diff --git a/mirrors/management/commands/mirrorresolv.py b/mirrors/management/commands/mirrorresolv.py index 77e7a223..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,13 +41,11 @@ 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(force_update=True) except socket.error, e: diff --git a/mirrors/models.py b/mirrors/models.py index b763fb63..7c269898 100644 --- a/mirrors/models.py +++ b/mirrors/models.py @@ -1,6 +1,7 @@ from django.db import models from django.core.exceptions import ValidationError +import socket from urlparse import urlparse TIER_CHOICES = ( @@ -56,8 +57,20 @@ class MirrorUrl(models.Model): 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: @@ -66,6 +79,14 @@ class MirrorUrl(models.Model): 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 -- cgit v1.2.3-2-g168b From 95a71576d2381b87916645b169fbc39898c250b3 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Thu, 3 Mar 2011 10:32:05 -0600 Subject: Bump Django required version Signed-off-by: Dan McGee --- requirements.txt | 2 +- requirements_prod.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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 -- cgit v1.2.3-2-g168b From 3a85ead4475b8acfa236a5b1825b844d0431bbaf Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Thu, 3 Mar 2011 12:31:58 -0600 Subject: Make Arch and Repo a MultipleChoice on package search Signed-off-by: Dan McGee --- packages/views.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/views.py b/packages/views.py index 1ab04258..7c57d88a 100644 --- a/packages/views.py +++ b/packages/views.py @@ -127,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(), @@ -157,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') @@ -178,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') -- cgit v1.2.3-2-g168b From 0c368ce4661c91f77aa79f189c4be11de5d94d27 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Thu, 3 Mar 2011 14:40:32 -0600 Subject: Correct some permission decorators Signed-off-by: Dan McGee --- packages/views.py | 4 ++-- todolists/views.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/views.py b/packages/views.py index 7c57d88a..2291c4f4 100644 --- a/packages/views.py +++ b/packages/views.py @@ -2,7 +2,7 @@ from django import forms from django.contrib import messages from django.contrib.admin.widgets import AdminDateWidget from django.contrib.auth.models import User -from django.contrib.auth.decorators import login_required, permission_required +from django.contrib.auth.decorators import permission_required from django.conf import settings from django.core.mail import send_mail from django.db.models import Q @@ -403,7 +403,7 @@ def arch_differences(request): } return direct_to_template(request, 'packages/differences.html', context) -@login_required +@permission_required('main.change_package') def stale_relations(request): relations = PackageRelation.objects.select_related('user') pkgbases = Package.objects.all().values('pkgbase') diff --git a/todolists/views.py b/todolists/views.py index 519fae9d..7d000809 100644 --- a/todolists/views.py +++ b/todolists/views.py @@ -32,7 +32,7 @@ class TodoListForm(forms.Form): return packages -@login_required +@permission_required('main.change_todolistpkg') @never_cache def flag(request, listid, pkgid): list = get_object_or_404(Todolist, id=listid) -- cgit v1.2.3-2-g168b From 710ec0a9de9a2185621cd7f51cdd2a056e12f999 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Thu, 3 Mar 2011 14:43:58 -0600 Subject: Remove devel notify view All of this can just be set on the main profile page. Signed-off-by: Dan McGee --- devel/tests.py | 7 ------- devel/urls.py | 1 - devel/views.py | 9 --------- templates/devel/index.html | 9 --------- 4 files changed, 26 deletions(-) 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..f89d6870 100644 --- a/devel/views.py +++ b/devel/views.py @@ -65,15 +65,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.") diff --git a/templates/devel/index.html b/templates/devel/index.html index cb9b92ae..08ca249a 100644 --- a/templates/devel/index.html +++ b/templates/devel/index.html @@ -89,15 +89,6 @@ -
{% csrf_token %} -
-

- -

-
-
-
-- cgit v1.2.3-2-g168b From 8b77efbfabfb3d65b0400e123025c02346454214 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Thu, 3 Mar 2011 14:59:04 -0600 Subject: Template fine-grained permissioning Rather than use user.is_authenticated, rely on certain permissions being set for the user. This allows us to open up the developer side and not assume everyone is a package maintainer. Allow all logged-in users to still view todo lists, but don't show the complete/incomplete links (only the text) unless they are allowed to mess with todo lists. Signed-off-by: Dan McGee --- templates/packages/details.html | 4 ++-- templates/packages/search.html | 6 +++--- templates/todolists/view.html | 4 ++++ 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/templates/packages/details.html b/templates/packages/details.html index ea5e528c..f73e9d7c 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 }} in testing {% endif %}{% endwith %} - {% if user.is_authenticated %} + {% if perms.main.change_package %}
  • Click here to unflag
  • Click here to unflag all split packages
  • {% endif %} @@ -40,7 +40,7 @@
  • Download From Mirror
  • - {% if user.is_authenticated %} + {% if perms.main.change_package %}
    {% csrf_token %}

    {% if user in pkg.maintainers %} diff --git a/templates/packages/search.html b/templates/packages/search.html index 4a779aa0..dad05ffa 100644 --- a/templates/packages/search.html +++ b/templates/packages/search.html @@ -71,7 +71,7 @@ - {% if user.is_authenticated %} + {% if perms.main.change_package %} {% endif %} - {% if user.is_authenticated %} + {% if perms.main.change_package %} {% endif %} @@ -134,7 +134,7 @@ {% endif %} - {% if user.is_authenticated %} + {% if perms.main.change_package %}

    {{ pkg.pkg.repo.name|capfirst }}

    {% endfor %} -- cgit v1.2.3-2-g168b From f29700ce67ad323e8c68dacd776cf3e991721104 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Thu, 3 Mar 2011 15:00:32 -0600 Subject: Add ordering to mirror protocols Signed-off-by: Dan McGee --- mirrors/models.py | 1 + 1 file changed, 1 insertion(+) diff --git a/mirrors/models.py b/mirrors/models.py index 7c269898..401821a8 100644 --- a/mirrors/models.py +++ b/mirrors/models.py @@ -51,6 +51,7 @@ class MirrorProtocol(models.Model): class Meta: verbose_name = 'Mirror Protocol' + ordering = ('protocol',) class MirrorUrl(models.Model): url = models.CharField(max_length=255) -- cgit v1.2.3-2-g168b From c722d8bf9e2f647d5cd8fa3a85a17d0cb3b5b101 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Fri, 4 Mar 2011 09:36:18 -0600 Subject: Remove multiple account login/logout URLs And slightly spruce up the logout template with a header. Signed-off-by: Dan McGee --- templates/base.html | 2 +- templates/registration/logout.html | 4 +++- urls.py | 4 ---- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/templates/base.html b/templates/base.html index 03795dd9..88bb3414 100644 --- a/templates/base.html +++ b/templates/base.html @@ -44,7 +44,7 @@ title="arch-dev mailing list archives">Archives
  • Mirrors
  • Profile
  • -
  • Logout
  • +
  • Logout
  • {% endif %} diff --git a/templates/registration/logout.html b/templates/registration/logout.html index f8e07621..e890ce99 100644 --- a/templates/registration/logout.html +++ b/templates/registration/logout.html @@ -3,7 +3,9 @@ {% block content %}
    -

    Logout successful.

    +

    Developer Logout

    + +

    Logout was successful.

    {% endblock %} diff --git a/urls.py b/urls.py index 3608da67..33319263 100644 --- a/urls.py +++ b/urls.py @@ -42,12 +42,8 @@ urlpatterns += patterns('django.contrib.sitemaps.views', 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 -- cgit v1.2.3-2-g168b From b5c67fad51b05b105487ff73c2d803ad9951f894 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Fri, 4 Mar 2011 11:10:33 -0600 Subject: Get general form up to snuff Signed-off-by: Dan McGee --- templates/general_form.html | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/templates/general_form.html b/templates/general_form.html index 12b35463..1fa33513 100644 --- a/templates/general_form.html +++ b/templates/general_form.html @@ -6,14 +6,18 @@

    {{title}}

    - {% if description %}{{description}}{% endif %} + {{description}} + {{form.non_field_errors}} {% csrf_token %}
    {% for field in form %} -


    - {{field.help_text}} {% else %}: {% endif %} - {{field}} {% if field.required %}*{% endif%}

    + {{field.errors}} +

    + {% if field.help_text %}
    {{field.help_text}}{% endif %} + {{field}} + {% if field.field.required %}*{% endif %} +

    {% endfor %}

    -- cgit v1.2.3-2-g168b From 3f4570c1995be17fefa9701e943ba9851113cd44 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Fri, 4 Mar 2011 11:11:06 -0600 Subject: Use transactions in todolist creation So we do all of the work at once and don't let things leak out before the list is completely added or updated. Signed-off-by: Dan McGee --- todolists/views.py | 94 ++++++++++++++++++++++++++++++------------------------ 1 file changed, 52 insertions(+), 42 deletions(-) diff --git a/todolists/views.py b/todolists/views.py index 7d000809..337fd0d6 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,11 +23,14 @@ 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') @permission_required('main.change_todolistpkg') @never_cache @@ -68,23 +68,17 @@ 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) + new_packages = create_todolist_packages(form, creator=request.user) + for new_package in new_packages: + send_newlist_email(new_package) - return redirect('/todo/') + return redirect(form.instance) else: form = TodoListForm() @@ -101,33 +95,18 @@ 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] + new_packages = create_todolist_packages(form) - # 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) + for new_package in new_packages: + send_todolist_email(new_package) 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,10 +121,41 @@ def delete_todolist(request, object_id): template_name="todolists/todolist_confirm_delete.html", post_delete_redirect='/todo/') + +@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_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 + maints = todo.pkg.maintainers.values_list('email', flat=True) if not maints: return @@ -159,7 +169,7 @@ def send_todolist_email(todo): send_mail('arch: Package [%s] added to Todolist' % todo.pkg.pkgname, t.render(c), 'Arch Website Notification ', - [m.email for m in maints], + maints, fail_silently=True) def public_list(request): -- cgit v1.2.3-2-g168b From 9d12c0fac5c0580b30c6bf8f578a358dc22afdff Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Fri, 4 Mar 2011 12:13:29 -0600 Subject: Move new user email contents to template Signed-off-by: Dan McGee --- devel/views.py | 30 ++++++++++++++++++++---------- packages/views.py | 2 +- templates/devel/new_account.txt | 5 +++++ 3 files changed, 26 insertions(+), 11 deletions(-) create mode 100644 templates/devel/new_account.txt diff --git a/devel/views.py b/devel/views.py index f89d6870..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) @@ -111,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 ', [user.email], fail_silently=False) diff --git a/packages/views.py b/packages/views.py index 2291c4f4..59779fe4 100644 --- a/packages/views.py +++ b/packages/views.py @@ -8,7 +8,7 @@ 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 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. -- cgit v1.2.3-2-g168b From 65e965c8f76677904f5d98965e13bf89726247d4 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Fri, 4 Mar 2011 12:39:53 -0600 Subject: Send only one email per todolist Customize each email on a per-maintainer basis and list all the relevant packages inside, rather than spamming people. Signed-off-by: Dan McGee --- templates/packages/outofdate.txt | 4 +-- templates/todolists/email_notification.txt | 13 +++---- todolists/views.py | 54 ++++++++++++++++-------------- 3 files changed, 33 insertions(+), 38 deletions(-) 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/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/todolists/views.py b/todolists/views.py index 337fd0d6..6bd456ae 100644 --- a/todolists/views.py +++ b/todolists/views.py @@ -75,9 +75,7 @@ def add(request): form = TodoListForm(request.POST) if form.is_valid(): new_packages = create_todolist_packages(form, creator=request.user) - for new_package in new_packages: - send_newlist_email(new_package) - + send_todolist_emails(form.instance, new_packages) return redirect(form.instance) else: form = TodoListForm() @@ -98,10 +96,7 @@ def edit(request, list_id): form = TodoListForm(request.POST, instance=todo_list) if form.is_valid(): new_packages = create_todolist_packages(form) - - for new_package in new_packages: - send_todolist_email(new_package) - + send_todolist_emails(todo_list, new_packages) return redirect(todo_list) else: form = TodoListForm(instance=todo_list, @@ -152,25 +147,32 @@ def create_todolist_packages(form, creator=None): return todo_pkgs -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.values_list('email', flat=True) - 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 ', - maints, - fail_silently=True) +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 ', + [maint], + fail_silently=True) def public_list(request): todo_lists = Todolist.objects.incomplete() -- cgit v1.2.3-2-g168b
      {% for pkg in package_list %}
    {{ pkg.arch.name }}{{ pkg.pkg.maintainers|join:', ' }} + {% if perms.main.change_todolistpkg %} {% if pkg.complete %} Complete @@ -45,6 +46,9 @@ Incomplete {% endif %} + {% else %} + {% if pkg.complete %}Complete{% else %}Incomplete{% endif %} + {% endif %}