I'm trying to hack up the below script as a post-receive git hook, but
the upload step fails with:

~~~
$ echo b422f33c8d3a7694ec9f3d4fa88fe5fde7de53f6
55e4817884263aa0ce292ebeca2a344a64ef20fa refs/head/master | python
/tmp/pr.py
==> Review Board Login Required
Enter username and password for Review Board at http://localhost/review/
>>> Attempting to create review request on /var/git/web.git for None
>>> Submitting the review request as joe
>>> HTTP POSTing to http://localhost/review/api/json/reviewrequests/new/: 
>>> {'repository_path': '/var/git/web.git', 'submit_as': 'joe'}
>>> Review request created
>>> Attempting to set field 'target_people' to 'yang' for review request '31'
>>> HTTP POSTing to 
>>> http://localhost/review/api/json/reviewrequests/31/draft/set/: 
>>> {'target_people': 'yang'}
>>> Uploading diff, size: 1238
>>> HTTP POSTing to 
>>> http://localhost/review/api/json/reviewrequests/31/diff/new/: {}
>>> Got API Error 105 (HTTP code 200): One or more fields had errors
>>> Error data: {u'fields': {u'path': [u'The diff file is empty']}, u'stat': 
>>> u'fail', u'err': {u'msg': u'One or more fields had errors', u'code': 105}}

Error uploading diff

The generated diff file was empty. This usually means no files were
modified in this change.

Try running with --output-diff and --debug for more information.

Your review request still exists, but the diff is not attached.
~~~

Adding a print diff shows that it's non-empty (as does the "Uploading
diff, size: 1238" line above). Any hints? Thanks advance. Below are
the script and the diff I'm seeing.

~~~
#!/usr/bin/env python

from rbtools.postreview import *
import git, cookielib, urllib2

def get_commits(old_rev, new_rev):
    p = subprocess.Popen(['git', 'log', '--pretty=format:%H', '--reverse',
                          '%s..%s' % (old_rev, new_rev)],
                         stdout=subprocess.PIPE)
    return p.stdout.read().split('\n')

parse_options(['--username=admin','--password=PASSWORD'])
info = RepositoryInfo('/var/git/web.git')
server = ReviewBoardServer('http://localhost/review/', info,
'/opt/git-helpers/share/cookies')
server.login()
repo = git.Repo('.')

for line in sys.stdin:
    old_rev, new_rev, ref_name = line.split()
    for chash in get_commits(old_rev, new_rev):
        c = repo.commit(chash)

        cmd = 'git diff-tree --no-commit-id -p --no-color -c'.split()
        diff = execute(cmd + [chash])

        author = c.author.email.split('@')[0]
        target = 'yang' if author == 'joe' else 'joe'

        if author != 'vik' and diff.strip() != '':
            parse_options([
                           '--debug',
                           '--submit-as='+author,
                           '--target-people='+target])

            review_url = tempt_fate(server, None, None, diff_content=diff,
                                    parent_diff_content=None, submit_as=author)
~~~

The diff:

~~~
diff --combined pod/model/__init__.py
index 4d6a447,eac9c73..01eac8d
--- a/pod/model/__init__.py
+++ b/pod/model/__init__.py
@@@ -291,7 -291,6 +291,7 @@@ mkindexes(TopicUserStats.user_id,  Topi
  class TopicStats(Base):
    __tablename__ = 'topic_stats'
    topic_id = Column(UUID, ForeignKey(Topic.id), primary_key = True)
 +  domain = Column(String, nullable = False)
    count = Column(Integer, nullable = False)
    views = Column(Integer, nullable = False)
    visitors = Column(Integer, nullable = False)
@@@ -303,7 -302,6 +303,7 @@@
  class UserStats(Base):
    __tablename__ = 'user_stats'
    user_id = Column(UUID, ForeignKey(User.id), primary_key = True)
 +  domain = Column(String, nullable = False)
    count = Column(Integer, nullable = False)
    views = Column(Integer, nullable = False)
    visitors = Column(Integer, nullable = False)
@@@ -337,6 -335,6 +337,8 @@@
      self.received = self.responses = self.forwarded = self.last_received = 0
      self.received_auto = self.responses_auto = self.forwarded_auto =
self.last_received_auto = 0
      Base.__init__(self, **kwargs)
++Index('most_active_by_domain', UserStats.domain, UserStats.count)
++

  class CorrespondenceStats(Base):
    __tablename__ = 'corr_stats'
~~~

--
Yang Zhang
http://yz.mit.edu/

-- 
Want to help the Review Board project? Donate today at 
http://www.reviewboard.org/donate/
Happy user? Let us know at http://www.reviewboard.org/users/
-~----------~----~----~----~------~----~------~--~---
To unsubscribe from this group, send email to 
reviewboard+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/reviewboard?hl=en

Reply via email to