123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254 |
- =================================
- The Django source code repository
- =================================
- When deploying a Django application into a real production
- environment, you will almost always want to use `an official packaged
- release of Django`_. However, if you'd like to try out in-development
- code from an upcoming release or contribute to the development of
- Django, you'll need to obtain a checkout from Django's source code
- repository. This document covers the way the code repository is laid
- out and how to work with and find things in it.
- .. _an official packaged release of Django: http://www.djangoproject.com/download/
- High-level overview
- ===================
- The Django source code repository uses `Subversion`_ to track changes
- to the code over time, so you'll need a copy of the Subversion client
- (a program called ``svn``) on your computer, and you'll want to
- familiarize yourself with the basics of how Subversion
- works. Subversion's Web site offers downloads for various operating
- systems, and `a free online book`_ is available to help you get up to
- speed with using Subversion.
- The Django Subversion repository is located online at
- `code.djangoproject.com/svn <http://code.djangoproject.com/svn/>`_. `A
- friendly Web-based interface for browsing the code`_ is also
- available, though when using Subversion you'll always want to use the
- repository address instead. At the top level of the repository are two
- directories: ``django`` contains the full source code for all Django
- releases, while ``djangoproject.com`` contains the source code and
- templates for the `djangoproject.com <http://www.djangoproject.com/>`_
- Web site. For trying out in-development Django code, or contributing
- to Django, you'll always want to check out code from some location in
- the ``django`` directory.
- Inside the ``django`` directory, Django's source code is organized
- into three areas:
- * ``branches`` contains branched copies of Django's code, which are
- (or were) maintained for various purposes. Some branches exist to
- provide a place to develop major or experimental new features
- without affecting the rest of Django's code, while others serve to
- provide bug fixes or support for older Django releases.
- * ``tags`` contains snapshots of Django's code at various important
- points in its history; mostly these are the exact revisions from
- which packaged Django releases were produced.
- * ``trunk`` contains the main in-development code which will become
- the next packaged release of Django, and is where most development
- activity is focused.
- .. _Subversion: http://subversion.tigris.org/
- .. _a free online book: http://svnbook.red-bean.com/
- .. _A friendly Web-based interface for browsing the code: http://code.djangoproject.com/browser/
- Working with Django's trunk
- ===========================
- If you'd like to try out the in-development code for the next release
- of Django, or if you'd like to contribute to Django by fixing bugs or
- developing new features, you'll want to get the code from trunk. You
- can get a complete copy of this code (a "Subversion checkout") by
- typing::
- svn co http://code.djangoproject.com/svn/django/trunk/
- Note that this will get *all* of Django: in addition to the top-level
- ``django`` module containing Python code, you'll also get a copy of
- Django's documentation, unit-test suite, packaging scripts and other
- miscellaneous bits. Django's code will be present in your checkout as
- a directory named ``django``.
- To try out the in-development trunk code with your own applications,
- simply place the directory containing your checkout on your Python
- import path. Then ``import`` statements which look for Django will find
- the ``django`` module within your checkout.
- If you're going to be working on Django's code (say, to fix a bug or
- develop a new feature), you can probably stop reading here and move
- over to :doc:`the documentation for contributing to Django
- </internals/contributing>`, which covers things like the preferred
- coding style and how to generate and submit a patch.
- Branches
- ========
- Django uses branches for two main purposes:
- 1. Development of major or experimental features, to keep them from
- affecting progress on other work in trunk.
- 2. Security and bug-fix support for older releases of Django, during
- their support lifetimes.
- Feature-development branches
- ----------------------------
- Feature-development branches tend by their nature to be
- temporary. Some produce successful features which are merged back into
- Django's trunk to become part of an official release, but others do
- not; in either case there comes a time when the branch is no longer
- being actively worked on by any developer. At this point the branch is
- considered closed.
- Unfortunately, Subversion has no standard way of indicating this. As a
- workaround, branches of Django which are closed and no longer
- maintained are moved into the directory ``django/branches/attic``.
- For reference, the following are branches whose code eventually became
- part of Django itself, and so are no longer separately maintained:
- * ``boulder-oracle-sprint``: Added support for Oracle databases to
- Django's object-relational mapper. This has been part of Django
- since the 1.0 release.
- * ``gis``: Added support for geographic/spatial queries to Django's
- object-relational mapper. This has been part of Django since the 1.0
- release, as the bundled application ``django.contrib.gis``.
- * ``i18n``: Added :doc:`internationalization support </topics/i18n/index>` to
- Django. This has been part of Django since the 0.90 release.
- * ``magic-removal``: A major refactoring of both the internals and
- public APIs of Django's object-relational mapper. This has been part
- of Django since the 0.95 release.
- * ``multi-auth``: A refactoring of :doc:`Django's bundled
- authentication framework </topics/auth>` which added support for
- :ref:`authentication backends <authentication-backends>`. This has
- been part of Django since the 0.95 release.
- * ``new-admin``: A refactoring of :doc:`Django's bundled
- administrative application </ref/contrib/admin/index>`. This became part of
- Django as of the 0.91 release, but was superseded by another
- refactoring (see next listing) prior to the Django 1.0 release.
- * ``newforms-admin``: The second refactoring of Django's bundled
- administrative application. This became part of Django as of the 1.0
- release, and is the basis of the current incarnation of
- ``django.contrib.admin``.
- * ``queryset-refactor``: A refactoring of the internals of Django's
- object-relational mapper. This became part of Django as of the 1.0
- release.
- * ``unicode``: A refactoring of Django's internals to consistently use
- Unicode-based strings in most places within Django and Django
- applications. This became part of Django as of the 1.0 release.
- Additionally, the following branches are closed, but their code was
- never merged into Django and the features they aimed to implement
- were never finished:
- * ``full-history``
- * ``generic-auth``
- * ``multiple-db-support``
- * ``per-object-permissions``
- * ``schema-evolution``
- * ``schema-evolution-ng``
- * ``search-api``
- * ``sqlalchemy``
- All of the above-mentioned branches now reside in
- ``django/branches/attic``.
- Support and bugfix branches
- ---------------------------
- In addition to fixing bugs in current trunk, the Django project
- provides official bug-fix support for the most recent released version
- of Django, and security support for the two most recently-released
- versions of Django. This support is provided via branches in which the
- necessary bug or security fixes are applied; the branches are then
- used as the basis for issuing bugfix or security releases.
- As of the Django 1.0 release, these branches can be found in the
- repository in the directory ``django/branches/releases``, and new branches
- will be created there approximately one month after each new Django
- release. For example, shortly after the release of Django 1.0, the
- branch ``django/branches/releases/1.0.X`` was created to receive bug
- fixes, and shortly after the release of Django 1.1 the branch
- ``django/branches/releases/1.1.X`` was created.
- Prior to the Django 1.0 release, these branches were maintaind within
- the top-level ``django/branches`` directory, and so the following
- branches exist there and provided support for older Django releases:
- * ``0.90-bugfixes``
- * ``0.91-bugfixes``
- * ``0.95-bugfixes``
- * ``0.96-bugfixes``
- Official support for those releases has expired, and so they no longer
- receive direct maintenance from the Django project. However, the
- branches continue to exist and interested community members have
- occasionally used them to provide unofficial support for old Django
- releases.
- Tags
- ====
- The directory ``django/tags`` within the repository contains complete
- copies of the Django source code as it existed at various points in
- its history. These "tagged" copies of Django are *never* changed or
- updated; new tags may be added as needed, but once added they are
- considered read-only and serve as useful guides to Django's
- development history.
- Within ``django/tags/releases`` are copies of the code which formed each
- packaged release of Django, and each tag is named with the version
- number of the release to which it corresponds. So, for example,
- ``django/tags/releases/1.1`` is a complete copy of the code which was
- packaged as the Django 1.1 release.
- Within ``django/tags/notable_moments`` are copies of the Django code from
- points which do not directly correspond to releases, but which are
- nonetheless important historical milestones for Django
- development. The current "notable moments" marked there are:
- * ``ipo``: Django's code as it existed at the moment Django was first
- publicly announced in 2005.
- * ``pre-magic-removal``: The state of Django's code just before the
- merging of the ``magic-removal`` branch (described above), which
- significantly updated Django's object-relational mapper.
- * ``pre-newforms-admin``: The state of Django's code just before the
- merging of the ``newforms-admin`` branch (see above), which
- significantly updated Django's bundled administrative application.
- * Tags corresponding to each of the alpha, beta and release-candidate
- packages in the run up to the Django 1.0 release.
|