= Bazaar-Perforce TODO =

== Introduction ==

See also the NEWS file in the same directory as this file.


== User Stories ==

The User Stories below appear in priority order.  The estimated relative
size of each story appears in square brackets ([]) following the story.

    * As a user, I want to use `bzr push` to submit changes to a Perforce
      depot via a Perforce client workspace view. [8]

    * As a user, I want to use `bzr rebase` to rebase a Bazaar branch on a
      Perforce depot via a Perforce client workspace view. [8]

    * As a user, I want to use `bzr branch` to branch from a Perforce depot
      via a Perforce client workspace view. [8]

    * As a user, I want to use `bzr log` to view submitted changes in a
      Perforce depot. [8]

    * As a user, I want to use bzr commands to work with a Perforce depot
      via a Perforce client workspace view. [?]

        * This is an epic.  It's a placeholder for bzr commands that don't
          have individual stories elsewhere in this backlog.

    * As a developer, I want to store Perforce metadata in mirrored Bazaar
      branches, using Jelmer's Bazaar code to store foreign revision
      identifiers in Bazaar branches, so that I can reuse that
      functionality. [3]

    * As a user, I want bzr2p4 to fail with a helpful error if I try to
      migrate a revision range that shouldn't apply cleanly given the
      states of the Perforce depot and workspace. [3] [1 hour]

    * As a user, I want p4-fast-export to import/export marks files so that
      it can perform robust incremental exports. [8]

    * As a developer, I want to make git_p4.P4Sync.importHeadRevision share
      code with importChanges and importNewBranch, especially so that it
      propagates the user of the Perforce changelist. [1]

    * As a developer, I want the application code not to depend on the p4
      command-line client. [8] [6 hours]

    * As a user, I want Bazaar-Perforce to be installed as p4 instead of
      bzrp4 so that it is consistent with other Bazaar plugins. [1]

    * As a user, I want the Bazaar-Perforce Launchpad branch to be named
      bzr-p4 instead of bzrp4 so that it is consistent with other Bazaar
      plugins. [1]

    * As a user, I want p4-fast-export.py packaged with bzr-fastimport so
      that I don't have to install an additional plugin (bzrp4) to use it. [3]

        * Note: Given the current physical structure of the code,
          fulfilling this story would require moving the following files:

            p4-fast-export.py
            p4_fast_export.py
            git_p4.py
            tests/test_p4_fast_export.py
            tests/test_git_p4.py
            tests/test_git_p4_imported.py
            tests/test_intermediate_file.py
            tests/p4_for_test

    * As a developer, I want to remove unused code. [2]

    * As a user, I want bzr fast-import to handle a Perforce path with a
      large number of files, and with very large individual files, without
      running out of memory. [8]

        * I attempted to import a head containing 22,909 files, where one
          particular file was bigger than 600 MB.  The bzr fast-import
          command raised MemoryError in parser.LineBasedParser.read_bytes.

    * As a user, I want to migrate the complete current head of a Perforce
      path to a Bazaar branch. [1]

        * I need to change the way pull.py computes and passes changelist
          ranges to git_p4.py.

    * As a user, I want to migrate the complete head as of a given
      changelist number from a Perforce path to a Bazaar branch. [5]

        * I need to change the way git_p4 receives and interprets
          changelist ranges.

    * As a developer, I want to cover pull.py with tests. [2]

    * As a user, I want documentation for pull.py. [1]

    * As a user, I want pull.py to work when I'm using standalone Bazaar
      for Windows.  [2]

        * As of 2009/02/10, p4-fast-export.py can't import bzrlib.plugin.

    * As a developer, I want the test code not to depend on Git. [5]

    * As a user, I want bzrp4 to migrate a Perforce view to a Bazaar
      branch. [5]

        * I think this works already.  Try passing //view@all to
          p4-fast-export.

    * As a developer, I want continuous integration, automatically
      triggered, for Linux test execution. [2]

    * As a developer, I want continuous integration, automatically
      triggered, for Cygwin test execution. [3]

    * As a user, I want bzr2p4 to show only the progress I care about
      instead of logging verbosely to the console. [3]

    * As a user, I want the line endings of my files not to change during
      migration, so that my data is exactly the same before and after
      migration. (I'm not sure Perforce can do this.) [13]

        * bzr2p4.py needs to set standard input and standard output to
          binary mode on Windows, I think.

    * As a user, I want the author of each Bazaar revision migrated to
      Perforce, so that I can easily see who created revisions in
      Perforce. [3]

    * As a user, I want migration of revisions with Perforce keywords to
      work correctly, so that I can migrate projects that use Perforce
      keywords. (Does this just need tests that demonstrate it works?) [3]

    * As a user, I want a suite of tools that facilitate creating a Bazaar
      branch from a Perforce depot, and submitting to a Perforce depot from
      a Bazaar branch. [?]