diff --git a/.gitignore b/.gitignore index 3224484..8fbdbfa 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ *.pyc *.kpf django_git.egg-info +dist/ diff --git a/README.md b/README.md index 818548f..ce31d8a 100644 --- a/README.md +++ b/README.md @@ -52,7 +52,7 @@ Requirements * GitPython * Django 1.3 (alpha or better) -If you would like to get started with django-git [Hugh Brown](http://github.com/hughdbrown) has created [Django-git-tester](http://github.com/hughdbrown/Django-git-tester). +If you would like to get started with django-git there is an basic project in example/ . Thanks! ------- diff --git a/django_git/templates/django_git/commit.html b/django_git/templates/django_git/commit.html index 4615a2f..6c43a38 100644 --- a/django_git/templates/django_git/commit.html +++ b/django_git/templates/django_git/commit.html @@ -9,7 +9,7 @@ {% endblock %} {% block title %} - {{ repo.path|name }} : {{ commit|first_eight }} + {{ repo.working_dir|path_into_title }} : {{ commit|first_eight }} {% endblock %} {% block main_content %} @@ -32,4 +32,4 @@ {% else %}

No diff information.

{% endif %} -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/django_git/templates/django_git/index.html b/django_git/templates/django_git/index.html index 0c68c7f..57f4a9a 100644 --- a/django_git/templates/django_git/index.html +++ b/django_git/templates/django_git/index.html @@ -15,10 +15,10 @@ {% for repo in repos %} - {{ repo.path|name }} + {{ repo.working_dir|path_into_title }} {{ repo.commits.0.message }} {{ repo.commits.0.author.name }} {% endfor %} -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/django_git/templates/django_git/repo.html b/django_git/templates/django_git/repo.html index 535ad43..cce600e 100644 --- a/django_git/templates/django_git/repo.html +++ b/django_git/templates/django_git/repo.html @@ -3,7 +3,7 @@ {% load repositories %} {% block title %} - {{ repo.path|name }} + {{ repo.working_dir|path_into_title }} {% endblock %} {% block main_content %} @@ -16,7 +16,7 @@ {% for commit in repo.commits %} - {{ commit|first_eight }} + {{ commit|first_eight }} {{ commit.message }} {{ commit.committer.name }} {{ commit.committed_date|tuple_to_date|date:"m/d/Y" }} @@ -32,4 +32,4 @@

Heads

{% endfor %} {% endif %} -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/django_git/templatetags/repositories.py b/django_git/templatetags/repositories.py index 5b9ddb2..272cef6 100644 --- a/django_git/templatetags/repositories.py +++ b/django_git/templatetags/repositories.py @@ -1,12 +1,19 @@ from datetime import datetime import os +import os.path from django import template register = template.Library() -@register.filter("name") -def name(value): - return value.split(os.sep)[-2] +@register.filter("path_into_title") +def path_into_title(value): + """Returns the title case of a path + + >> path2title('/Users/mark/derp.git') + ... derp + + """ + return value.split(os.sep)[-1] @register.filter("first_eight") def first_eight(value): @@ -14,4 +21,4 @@ def first_eight(value): @register.filter("tuple_to_date") def tuple_to_date(value): - return datetime(value[0], value[1], value[2], value[3], value[4], value[5], value[6]) \ No newline at end of file + return datetime(value[0], value[1], value[2], value[3], value[4], value[5], value[6]) diff --git a/example/__init__.py b/example/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/example/manage.py b/example/manage.py new file mode 100755 index 0000000..f9726f9 --- /dev/null +++ b/example/manage.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python +import os +import sys + +if __name__ == "__main__": + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings") + + from django.core.management import execute_from_command_line + + execute_from_command_line(sys.argv) diff --git a/example/settings.py b/example/settings.py new file mode 100644 index 0000000..cab5ff2 --- /dev/null +++ b/example/settings.py @@ -0,0 +1,163 @@ +# Django settings for example project. +import os.path + +DEBUG = True +TEMPLATE_DEBUG = DEBUG + +PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__)) + +ADMINS = ( + # ('Your Name', 'your_email@example.com'), +) + +MANAGERS = ADMINS + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'. + 'NAME': '', # Or path to database file if using sqlite3. + 'USER': '', # Not used with sqlite3. + 'PASSWORD': '', # Not used with sqlite3. + 'HOST': '', # Set to empty string for localhost. Not used with sqlite3. + 'PORT': '', # Set to empty string for default. Not used with sqlite3. + } +} + +# Local time zone for this installation. Choices can be found here: +# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name +# although not all choices may be available on all operating systems. +# On Unix systems, a value of None will cause Django to use the same +# timezone as the operating system. +# If running in a Windows environment this must be set to the same as your +# system time zone. +TIME_ZONE = 'America/Chicago' + +# Language code for this installation. All choices can be found here: +# http://www.i18nguy.com/unicode/language-identifiers.html +LANGUAGE_CODE = 'en-us' + +SITE_ID = 1 + +# If you set this to False, Django will make some optimizations so as not +# to load the internationalization machinery. +USE_I18N = True + +# If you set this to False, Django will not format dates, numbers and +# calendars according to the current locale. +USE_L10N = True + +# If you set this to False, Django will not use timezone-aware datetimes. +USE_TZ = True + +# Absolute filesystem path to the directory that will hold user-uploaded files. +# Example: "/home/media/media.lawrence.com/media/" +MEDIA_ROOT = os.path.join(PROJECT_ROOT, 'media') + +# URL that handles the media served from MEDIA_ROOT. Make sure to use a +# trailing slash. +# Examples: "http://media.lawrence.com/media/", "http://example.com/media/" +MEDIA_URL = '/media/' + +# Absolute path to the directory static files should be collected to. +# Don't put anything in this directory yourself; store your static files +# in apps' "static/" subdirectories and in STATICFILES_DIRS. +# Example: "/home/media/media.lawrence.com/static/" +STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static') + +# URL prefix for static files. +# Example: "http://media.lawrence.com/static/" +STATIC_URL = '/static/' + +# Additional locations of static files +STATICFILES_DIRS = ( + # Put strings here, like "/home/html/static" or "C:/www/django/static". + # Always use forward slashes, even on Windows. + # Don't forget to use absolute paths, not relative paths. +) + +# List of finder classes that know how to find static files in +# various locations. +STATICFILES_FINDERS = ( + 'django.contrib.staticfiles.finders.FileSystemFinder', + 'django.contrib.staticfiles.finders.AppDirectoriesFinder', +# 'django.contrib.staticfiles.finders.DefaultStorageFinder', +) + +# Make this unique, and don't share it with anybody. +SECRET_KEY = '#uzwpnjyt9@a0=ghhqv_4m2bo_j_74-tprd67hkg3u))$=*j4i' + +# List of callables that know how to import templates from various sources. +TEMPLATE_LOADERS = ( + 'django.template.loaders.filesystem.Loader', + 'django.template.loaders.app_directories.Loader', +# 'django.template.loaders.eggs.Loader', +) + +MIDDLEWARE_CLASSES = ( + 'django.middleware.common.CommonMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + # Uncomment the next line for simple clickjacking protection: + # 'django.middleware.clickjacking.XFrameOptionsMiddleware', +) + +ROOT_URLCONF = 'urls' + +# Python dotted path to the WSGI application used by Django's runserver. +WSGI_APPLICATION = 'wsgi.application' + +TEMPLATE_DIRS = ( + # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates". + # Always use forward slashes, even on Windows. + # Don't forget to use absolute paths, not relative paths. + os.path.join(PROJECT_ROOT, 'templates'), +) + +INSTALLED_APPS = ( + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.sites', + 'django.contrib.messages', + 'django.contrib.staticfiles', + # Uncomment the next line to enable the admin: + # 'django.contrib.admin', + # Uncomment the next line to enable admin documentation: + # 'django.contrib.admindocs', + + 'django_git', +) + +# A sample logging configuration. The only tangible logging +# performed by this configuration is to send an email to +# the site admins on every HTTP 500 error when DEBUG=False. +# See http://docs.djangoproject.com/en/dev/topics/logging for +# more details on how to customize your logging configuration. +LOGGING = { + 'version': 1, + 'disable_existing_loggers': False, + 'filters': { + 'require_debug_false': { + '()': 'django.utils.log.RequireDebugFalse' + } + }, + 'handlers': { + 'mail_admins': { + 'level': 'ERROR', + 'filters': ['require_debug_false'], + 'class': 'django.utils.log.AdminEmailHandler' + } + }, + 'loggers': { + 'django.request': { + 'handlers': ['mail_admins'], + 'level': 'ERROR', + 'propagate': True, + }, + } +} + +## DJANGO-GIT SETTINGS +REPOS_ROOT = os.path.expanduser('~/Projects/') diff --git a/example/templates/base.html b/example/templates/base.html new file mode 100644 index 0000000..336ea44 --- /dev/null +++ b/example/templates/base.html @@ -0,0 +1,10 @@ + + + + Django Git Tester|{% block title %}{% endblock title %} + {% block extra_head %}{% endblock extra_head %} + + + {% block main_content %}{% endblock main_content %} + + diff --git a/example/urls.py b/example/urls.py new file mode 100644 index 0000000..0be5c45 --- /dev/null +++ b/example/urls.py @@ -0,0 +1,20 @@ +from django.conf.urls import patterns, include, url + +# Uncomment the next two lines to enable the admin: +# from django.contrib import admin +# admin.autodiscover() + +urlpatterns = patterns('', + # Examples: + # url(r'^$', 'example.views.home', name='home'), + # url(r'^example/', include('example.foo.urls')), + + # Uncomment the admin/doc line below to enable admin documentation: + # url(r'^admin/doc/', include('django.contrib.admindocs.urls')), + + # Uncomment the next line to enable the admin: + # url(r'^admin/', include(admin.site.urls)), + + url(r'^git/', include('django_git.urls')), +) + diff --git a/example/wsgi.py b/example/wsgi.py new file mode 100644 index 0000000..e3cde02 --- /dev/null +++ b/example/wsgi.py @@ -0,0 +1,28 @@ +""" +WSGI config for example project. + +This module contains the WSGI application used by Django's development server +and any production WSGI deployments. It should expose a module-level variable +named ``application``. Django's ``runserver`` and ``runfcgi`` commands discover +this application via the ``WSGI_APPLICATION`` setting. + +Usually you will have the standard Django WSGI application here, but it also +might make sense to replace the whole Django WSGI application with a custom one +that later delegates to the Django one. For example, you could introduce WSGI +middleware here, or combine a Django application with an application of another +framework. + +""" +import os + +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings") + +# This application object is used by any WSGI server configured to use this +# file. This includes Django's development server, if the WSGI_APPLICATION +# setting points here. +from django.core.wsgi import get_wsgi_application +application = get_wsgi_application() + +# Apply WSGI middleware here. +# from helloworld.wsgi import HelloWorldApplication +# application = HelloWorldApplication(application) diff --git a/requirements.txt b/requirements.txt index 5104aad..ccf0794 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,2 @@ --e git+git://github.com/defunkt/pygments.git#egg=pygments --e git+git://github.com/mm/gitpython.git#egg=gitpython +Pygments +gitpython diff --git a/setup.py b/setup.py index 945ee49..0075e6c 100644 --- a/setup.py +++ b/setup.py @@ -19,5 +19,5 @@ packages=['django_git', 'django_git.templatetags'], package_data={ 'django_git' : ['templates/django_git/*.html', 'media/js/*.js']}, zip_safe=False, - install_requires=['GitPython >=0.1.4', 'Pygments >=0.11'], + install_requires=['GitPython >=0.3', 'Pygments >=0.11'], )