• 
      

    Add the DiffCommit model.

    Review Request #6766 — Created Jan. 13, 2015 and discarded

    Information

    Review Board
    master

    Reviewers

    The DiffSet model has been updated to be able to contain several
    DiffCommits in addition to FileDiffs. The DiffCommit model
    represents a single commit in distributed version control system
    (DVCS). Each DiffCommit has one or more FileDiffs that belong to
    it (as well as the DiffSet).

    Add an evolution to add a foreign key on the FileDiff model to point
    to an optional DiffCommit model. Also add an evolution to add a
    RelationCounterField to the DiffSet model that counts the number
    of DiffCommits it currently has.

    Update the reviewboard.diffviewer.admin module to add the ability to
    view individual DiffCommits. The DiffCommits can be as inline
    models of the DiffSet model and have FileDiff as an inline model.

    Ran unit tests.
    Applied evolution successfully.

    Description From Last Updated

    Col: 1 E302 expected 2 blank lines, found 1

    reviewbotreviewbot

    Col: 1 W391 blank line at end of file

    reviewbotreviewbot

    Something I realized is that we now have two things called Commit. This one and the one in reviewboard.scmtools.core. Perhaps …

    chipx86chipx86

    Should localize the labels using ugettext_lazy.

    chipx86chipx86

    Let's use commit_type, since type is technically a reserved word.

    chipx86chipx86

    Is this intended to be the summary, or something else?

    chipx86chipx86

    I'm not sure the correct answer to this, but I'm wondering if this field is needed, given that it's only …

    chipx86chipx86

    Maybe commit_id to be consistent with other uses in the codebase.

    chipx86chipx86

    Maybe worth allowing these to be null/blank? If used in some patchset tool (for, say, CVS/Subversion changes), we may not …

    chipx86chipx86

    Let's define a constant for the length that we can reuse in all these. COMMIT_ID_LENGTH?

    chipx86chipx86

    Maybe to make this more useful for debugging/browsing in the admin UI, we can have this include the summary of …

    chipx86chipx86

    Just a small thing, but it'd be nice to extend this a bit to talk generally about the kinds of …

    chipx86chipx86

    If you use #: instead of #, we'll be able to include the comments in any auto-generated documentation (which I …

    chipx86chipx86

    Can this explain what we consider to be a valid commit?

    chipx86chipx86

    If you make this a @cached_property (a utility provided by Django), then the summary will only ever be calculated once …

    chipx86chipx86

    It's safe to split on a character that isn't in the string. In that case, you'll just get the entire …

    chipx86chipx86

    Missing #:

    chipx86chipx86

    """ on the next line.

    chipx86chipx86

    We have a mix in the codebase, but I think "Returns" instead of "Gets" does a better job of saying …

    chipx86chipx86
    reviewbot
    1. Tool: PEP8 Style Checker
      Processed Files:
          reviewboard/diffviewer/admin.py
          reviewboard/diffviewer/models.py
          reviewboard/diffviewer/evolutions/add_commit_history_fields.py
          reviewboard/diffviewer/evolutions/__init__.py
      
      
      
      Tool: Pyflakes
      Processed Files:
          reviewboard/diffviewer/admin.py
          reviewboard/diffviewer/models.py
          reviewboard/diffviewer/evolutions/add_commit_history_fields.py
          reviewboard/diffviewer/evolutions/__init__.py
      
      
    2. reviewboard/diffviewer/admin.py (Diff revision 1)
       
       
      Show all issues
      Col: 1
       E302 expected 2 blank lines, found 1
      
    3. 
        
    brennie
    reviewbot
    1. Tool: Pyflakes
      Processed Files:
          reviewboard/diffviewer/admin.py
          reviewboard/diffviewer/models.py
          reviewboard/diffviewer/evolutions/add_commit_history_fields.py
          reviewboard/diffviewer/evolutions/__init__.py
      
      
      
      Tool: PEP8 Style Checker
      Processed Files:
          reviewboard/diffviewer/admin.py
          reviewboard/diffviewer/models.py
          reviewboard/diffviewer/evolutions/add_commit_history_fields.py
          reviewboard/diffviewer/evolutions/__init__.py
      
      
    2. 
        
    brennie
    brennie
    reviewbot
    1. Tool: Pyflakes
      Processed Files:
          reviewboard/diffviewer/admin.py
          reviewboard/diffviewer/models.py
          reviewboard/diffviewer/evolutions/add_commit_history_fields.py
          reviewboard/diffviewer/evolutions/__init__.py
      
      
      
      Tool: PEP8 Style Checker
      Processed Files:
          reviewboard/diffviewer/admin.py
          reviewboard/diffviewer/models.py
          reviewboard/diffviewer/evolutions/add_commit_history_fields.py
          reviewboard/diffviewer/evolutions/__init__.py
      
      
    2. reviewboard/diffviewer/models.py (Diff revision 3)
       
       
      Show all issues
      Col: 1
       W391 blank line at end of file
      
    3. 
        
    brennie
    reviewbot
    1. Tool: Pyflakes
      Processed Files:
          reviewboard/diffviewer/admin.py
          reviewboard/diffviewer/models.py
          reviewboard/diffviewer/evolutions/add_commit_history_fields.py
          reviewboard/diffviewer/evolutions/__init__.py
      
      
      
      Tool: PEP8 Style Checker
      Processed Files:
          reviewboard/diffviewer/admin.py
          reviewboard/diffviewer/models.py
          reviewboard/diffviewer/evolutions/add_commit_history_fields.py
          reviewboard/diffviewer/evolutions/__init__.py
      
      
    2. 
        
    chipx86
    1. Looking good! I have a bunch of comments, but they're minor, or just design questions.

    2. reviewboard/diffviewer/models.py (Diff revision 4)
       
       
      Show all issues

      Something I realized is that we now have two things called Commit. This one and the one in reviewboard.scmtools.core.

      Perhaps (in a separate change) we should rename the other one to SCMCommit.

      1. Should we rename this to DiffCommit to align with the DiffCommitResource and DraftDiffCommitResource or just leave everything alone?

      2. I think DiffCommit would be fine. Alignment is good.

    3. reviewboard/diffviewer/models.py (Diff revision 4)
       
       
       
      Show all issues

      Should localize the labels using ugettext_lazy.

    4. reviewboard/diffviewer/models.py (Diff revision 4)
       
       
       
      Show all issues

      Let's use commit_type, since type is technically a reserved word.

    5. reviewboard/diffviewer/models.py (Diff revision 4)
       
       
      Show all issues

      Is this intended to be the summary, or something else?

      1. This is intended to be the name of the .diff file that gets uploaded for the Commit.

      2. Ah, okay. Sounds good.

    6. reviewboard/diffviewer/models.py (Diff revision 4)
       
       
       
      Show all issues

      I'm not sure the correct answer to this, but I'm wondering if this field is needed, given that it's only really used for Subversion, and we have the info in the diffset. Since only RBTools or something custom would be able to post commits, we can probably get away with saying that all commits must have file paths relative to the DiffSet's basedir.

      1. I put this on the Commit model because the parent DiffSet is created without the diffs, but I guess its no big deal to just provide the basedir parameter to the DiffSet upon its creation. I'll drop this field from this model.

    7. reviewboard/diffviewer/models.py (Diff revision 4)
       
       
      Show all issues

      Maybe commit_id to be consistent with other uses in the codebase.

    8. reviewboard/diffviewer/models.py (Diff revision 4)
       
       
       
      Show all issues

      Maybe worth allowing these to be null/blank? If used in some patchset tool (for, say, CVS/Subversion changes), we may not have this information.

      1. Aren't patchset tools like CVS and SVN going to be incompatible with this because you won't have the notion of the changesets living outside what is checked in?

      2. CVS and SVN themselves wouldn't take advantage of this, but there are tools that sit on top of CVS/SVN/Perforce that let people work in patchsets, and they do all the hard work of managing them. Basically, think git-svn, but with a Subversion checkout. Quilt, for instance.

        That's all kinda theoretical, as I don't expect we'll ever explicitly support them. Someone out there may, but probably not us.

        However, it looks like Monotone doesn't have a concept of author vs. committer, so that looks to be a real-world example of one that needs to allow for blank values.

    9. reviewboard/diffviewer/models.py (Diff revision 4)
       
       
      Show all issues

      Let's define a constant for the length that we can reuse in all these. COMMIT_ID_LENGTH?

    10. reviewboard/diffviewer/models.py (Diff revision 4)
       
       
      Show all issues

      Maybe to make this more useful for debugging/browsing in the admin UI, we can have this include the summary of the commit message. (Could define a summary @property that grabs the first line from description).

    11. 
        
    brennie
    reviewbot
    1. Tool: PEP8 Style Checker
      Processed Files:
          reviewboard/diffviewer/admin.py
          reviewboard/diffviewer/models.py
          reviewboard/diffviewer/evolutions/add_commit_history_fields.py
          reviewboard/diffviewer/evolutions/__init__.py
      
      
      
      Tool: Pyflakes
      Processed Files:
          reviewboard/diffviewer/admin.py
          reviewboard/diffviewer/models.py
          reviewboard/diffviewer/evolutions/add_commit_history_fields.py
          reviewboard/diffviewer/evolutions/__init__.py
      
      
    2. 
        
    brennie
    reviewbot
    1. Tool: Pyflakes
      Processed Files:
          reviewboard/diffviewer/admin.py
          reviewboard/diffviewer/models.py
          reviewboard/diffviewer/evolutions/add_commit_history_fields.py
          reviewboard/diffviewer/evolutions/__init__.py
      
      
      
      Tool: PEP8 Style Checker
      Processed Files:
          reviewboard/diffviewer/admin.py
          reviewboard/diffviewer/models.py
          reviewboard/diffviewer/evolutions/add_commit_history_fields.py
          reviewboard/diffviewer/evolutions/__init__.py
      
      
    2. 
        
    brennie
    reviewbot
    1. Tool: PEP8 Style Checker
      Processed Files:
          reviewboard/diffviewer/admin.py
          reviewboard/diffviewer/models.py
          reviewboard/diffviewer/evolutions/add_commit_history_fields.py
          reviewboard/diffviewer/evolutions/__init__.py
      
      
      
      Tool: Pyflakes
      Processed Files:
          reviewboard/diffviewer/admin.py
          reviewboard/diffviewer/models.py
          reviewboard/diffviewer/evolutions/add_commit_history_fields.py
          reviewboard/diffviewer/evolutions/__init__.py
      
      
    2. 
        
    chipx86
    1. Looks great! I mostly just have some doc suggestions, but I think this is exactly what we want.

      (I'll want Steven to have a look as well, since he's been thinking about a lot of this more actively than I.)

    2. reviewboard/diffviewer/models.py (Diff revision 7)
       
       
       
       
      Show all issues

      Just a small thing, but it'd be nice to extend this a bit to talk generally about the kinds of data that can be stored on here and how the commit information is used, just to flesh this out.

    3. reviewboard/diffviewer/models.py (Diff revision 7)
       
       
      Show all issues

      If you use #: instead of #, we'll be able to include the comments in any auto-generated documentation (which I really want to start including at some point on the site).

    4. reviewboard/diffviewer/models.py (Diff revision 7)
       
       
      Show all issues

      Can this explain what we consider to be a valid commit?

    5. reviewboard/diffviewer/models.py (Diff revision 7)
       
       
      Show all issues

      If you make this a @cached_property (a utility provided by Django), then the summary will only ever be calculated once per Commit instance.

    6. reviewboard/diffviewer/models.py (Diff revision 7)
       
       
       
       
       
      Show all issues

      It's safe to split on a character that isn't in the string. In that case, you'll just get the entire string.

      So, this can be:

      text = text.split('\n', 1)[0].strip()
      
    7. 
        
    brennie
    reviewbot
    1. Tool: Pyflakes
      Processed Files:
          reviewboard/diffviewer/admin.py
          reviewboard/diffviewer/models.py
          reviewboard/diffviewer/evolutions/add_commit_history_fields.py
          reviewboard/diffviewer/evolutions/__init__.py
      
      
      
      Tool: PEP8 Style Checker
      Processed Files:
          reviewboard/diffviewer/admin.py
          reviewboard/diffviewer/models.py
          reviewboard/diffviewer/evolutions/add_commit_history_fields.py
          reviewboard/diffviewer/evolutions/__init__.py
      
      
    2. 
        
    brennie
    reviewbot
    1. Tool: PEP8 Style Checker
      Processed Files:
          reviewboard/diffviewer/admin.py
          reviewboard/diffviewer/models.py
          reviewboard/diffviewer/evolutions/add_commit_history_fields.py
          reviewboard/diffviewer/evolutions/__init__.py
      
      
      
      Tool: Pyflakes
      Processed Files:
          reviewboard/diffviewer/admin.py
          reviewboard/diffviewer/models.py
          reviewboard/diffviewer/evolutions/add_commit_history_fields.py
          reviewboard/diffviewer/evolutions/__init__.py
      
      
    2. 
        
    brennie
    chipx86
    1. Last three little bits I noticed, and then I'm happy.

    2. reviewboard/diffviewer/models.py (Diff revision 9)
       
       
      Show all issues

      Missing #:

    3. reviewboard/diffviewer/models.py (Diff revision 9)
       
       
      Show all issues

      """ on the next line.

    4. reviewboard/diffviewer/models.py (Diff revision 9)
       
       
      Show all issues

      We have a mix in the codebase, but I think "Returns" instead of "Gets" does a better job of saying what this will do. A function can get something and store it someplace without ever returning it.

    5. 
        
    brennie
    reviewbot
    1. Tool: Pyflakes
      Processed Files:
          reviewboard/diffviewer/admin.py
          reviewboard/diffviewer/models.py
          reviewboard/diffviewer/evolutions/add_commit_history_fields.py
          reviewboard/diffviewer/evolutions/__init__.py
      
      
      
      Tool: PEP8 Style Checker
      Processed Files:
          reviewboard/diffviewer/admin.py
          reviewboard/diffviewer/models.py
          reviewboard/diffviewer/evolutions/add_commit_history_fields.py
          reviewboard/diffviewer/evolutions/__init__.py
      
      
    2. 
        
    brennie
    reviewbot
    1. Tool: PEP8 Style Checker
      Processed Files:
          reviewboard/diffviewer/admin.py
          reviewboard/diffviewer/models.py
          reviewboard/diffviewer/evolutions/add_commit_history_fields.py
          reviewboard/diffviewer/evolutions/__init__.py
      
      
      
      Tool: Pyflakes
      Processed Files:
          reviewboard/diffviewer/admin.py
          reviewboard/diffviewer/models.py
          reviewboard/diffviewer/evolutions/add_commit_history_fields.py
          reviewboard/diffviewer/evolutions/__init__.py
      
      
    2. 
        
    brennie
    reviewbot
    1. Tool: Pyflakes
      Processed Files:
          reviewboard/diffviewer/models.py
      
      
      
      Tool: PEP8 Style Checker
      Processed Files:
          reviewboard/diffviewer/models.py
      
      
    2. 
        
    brennie
    reviewbot
    1. Tool: PEP8 Style Checker
      Processed Files:
          reviewboard/diffviewer/admin.py
          reviewboard/diffviewer/models.py
          reviewboard/diffviewer/evolutions/add_commit_history_fields.py
          reviewboard/diffviewer/evolutions/__init__.py
      
      
      
      Tool: Pyflakes
      Processed Files:
          reviewboard/diffviewer/admin.py
          reviewboard/diffviewer/models.py
          reviewboard/diffviewer/evolutions/add_commit_history_fields.py
          reviewboard/diffviewer/evolutions/__init__.py
      
      
    2. 
        
    brennie
    reviewbot
    1. Tool: Pyflakes
      Processed Files:
          reviewboard/diffviewer/admin.py
          reviewboard/diffviewer/models.py
          reviewboard/diffviewer/evolutions/add_commit_history_fields.py
          reviewboard/diffviewer/evolutions/__init__.py
      
      
      
      Tool: PEP8 Style Checker
      Processed Files:
          reviewboard/diffviewer/admin.py
          reviewboard/diffviewer/models.py
          reviewboard/diffviewer/evolutions/add_commit_history_fields.py
          reviewboard/diffviewer/evolutions/__init__.py
      
      
    2. 
        
    brennie
    Review request changed
    Status:
    Discarded
    Change Summary:

    Splitting this up more.