Hey Zach,

I basically have this fixed, and will be getting it through a review cycle
and ready for a new django_evolution release, but I have some concerns
about your database. It seems to be missing a couple major releases worth
of evolutions.

The SQL you found seems to match the missing evolution, so I'm guessing
someone's been applying them by hand?

It's absolutely crucial that this be fixed for an upgrade, or things can
end up quickly in a bad state. Future releases will be increasingly harder
to upgrade to.

There's basically two options here:

1) You can try installing a brand new site, using a brand new database, in
order to generate a correct set of evolution data. You'd then want to copy
the contents of these two tables (the same ones you sent me) from the that
new database to the one you want to upgrade, completely replacing the
copies in that database.

2) We can do this for you and deal with any other issues that come up along
the way, and fully repair your database. We'd have you up and running under
2.0 quick. However, we can only do this under a support contract.

I'll let you know when we have the django_evolution release out. I can also
send you an early build to test, if you let me know what version of Python
you're using.

Christian


-- 
Christian Hammond - christ...@beanbaginc.com
Review Board - http://www.reviewboard.org
Beanbag, Inc. - http://www.beanbaginc.com

On Fri, Apr 3, 2015 at 8:47 PM, Christian Hammond <christ...@beanbaginc.com>
wrote:

> I believe I've isolated the problem to a bug in django-evolution. Haven't
> figured out the exact cause just yet, but working on it!
>
> Christian
>
> --
> Christian Hammond - christ...@beanbaginc.com
> Review Board - http://www.reviewboard.org
> Beanbag, Inc. - http://www.beanbaginc.com
>
> On Fri, Apr 3, 2015 at 7:35 PM, Christian Hammond <
> christ...@beanbaginc.com> wrote:
>
>> Hi Zach,
>>
>> I'm sorry, I haven't had any time to make progress on this. Been busy
>> with some of our premium support customers, student program, and a few
>> other things. I have a couple hours I can spend right now, so I'll see if
>> anything stands out.
>>
>> Where did those SQL statements come from?
>>
>> FWIW, Django Evolution has been around since the 1.0 alphas.
>>
>> Christian
>>
>> --
>> Christian Hammond - christ...@beanbaginc.com
>> Review Board - http://www.reviewboard.org
>> Beanbag, Inc. - http://www.beanbaginc.com
>>
>> On Thu, Apr 2, 2015 at 8:13 AM, Zach Auclair <zach...@gmail.com> wrote:
>>
>>> Hey Christian,
>>>
>>> Have you been able to make any progress on debugging this? I just wanted
>>> to point out that I believe before the current version that to upgrade to
>>> the current version we were on long ago, our previous maintainer may have
>>> run some migrations by hand (before this had django_evolutions?).
>>>
>>> Some of the sql I found:
>>>
>>> ```
>>> CREATE INDEX "django_session_expire_date" ON "django_session"
>>> ("expire_date");
>>>
>>> ALTER TABLE "diffviewer_filediff" ALTER COLUMN "source_file" TYPE
>>> varchar(1024) USING CAST("source_file" as varchar(1024));
>>> ALTER TABLE "diffviewer_filediff" ALTER COLUMN "dest_file" TYPE
>>> varchar(1024) USING CAST("dest_file" as varchar(1024));
>>> ALTER TABLE "diffviewer_diffset" ADD COLUMN "basedir" varchar(256) ;
>>> UPDATE "diffviewer_diffset" SET "basedir" = '' WHERE "basedir" IS NULL;
>>> ALTER TABLE "diffviewer_diffset" ALTER COLUMN "basedir" SET NOT NULL;
>>> ALTER TABLE "diffviewer_filediff" ADD COLUMN "status" varchar(1) ;
>>> UPDATE "diffviewer_filediff" SET "status" = 'M' WHERE "status" IS NULL;
>>> ALTER TABLE "diffviewer_filediff" ALTER COLUMN "status" SET NOT NULL;
>>> ALTER TABLE "reviews_reviewrequest" ADD COLUMN "last_review_timestamp"
>>> timestamp with time zone NULL ;
>>>
>>>         UPDATE reviews_reviewrequest
>>>            SET last_review_timestamp = (
>>>                SELECT reviews_review.timestamp
>>>                  FROM reviews_review
>>>                 WHERE reviews_review.review_request_id =
>>>                       reviews_reviewrequest.id
>>>                   AND reviews_review.public
>>>                 ORDER BY reviews_review.timestamp DESC
>>>                 LIMIT 1);
>>>
>>> ALTER TABLE "reviews_reviewrequest" ADD COLUMN "shipit_count" integer ;
>>> UPDATE "reviews_reviewrequest" SET "shipit_count" = 0 WHERE
>>> "shipit_count" IS NULL;
>>>
>>>         UPDATE reviews_reviewrequest
>>>            SET shipit_count = (
>>>                SELECT COUNT(*)
>>>                  FROM reviews_review
>>>                 WHERE reviews_review.review_request_id =
>>>                       reviews_reviewrequest.id
>>>                   AND reviews_review.public
>>>                   AND reviews_review.ship_it
>>>                   AND reviews_review.base_reply_to_id is NULL);
>>>
>>> CREATE TABLE "reviews_defaultreviewer_repository" (
>>>     "id" serial NOT NULL PRIMARY KEY,
>>>     "defaultreviewer_id" integer NOT NULL,
>>>     "repository_id" integer NOT NULL,
>>>     UNIQUE ("defaultreviewer_id", "repository_id")
>>> )
>>> ;
>>> ALTER TABLE "reviews_defaultreviewer_repository" ADD CONSTRAINT
>>> "defaultreviewer_id_refs_id_51486bbd" FOREIGN KEY ("defaultreviewer_id")
>>> REFERENCES "reviews_defaultreviewer" ("id") DEFERRABLE INITIALLY DEFERRED;
>>> ALTER TABLE "reviews_defaultreviewer_repository" ADD CONSTRAINT
>>> "repository_id_refs_id_8161d2ae" FOREIGN KEY ("repository_id") REFERENCES
>>> "scmtools_repository" ("id") DEFERRABLE INITIALLY DEFERRED;
>>> ALTER TABLE "reviews_reviewrequest" ALTER COLUMN "repository_id" DROP
>>> NOT NULL;
>>> ALTER TABLE "scmtools_repository" ADD COLUMN "raw_file_url" varchar(128)
>>> ;
>>> UPDATE "scmtools_repository" SET "raw_file_url" = '' WHERE
>>> "raw_file_url" IS NULL;
>>> ALTER TABLE "scmtools_repository" ALTER COLUMN "raw_file_url" SET NOT
>>> NULL;
>>> ALTER TABLE "scmtools_repository" ADD COLUMN "visible" boolean ;
>>> UPDATE "scmtools_repository" SET "visible" = True WHERE "visible" IS
>>> NULL;
>>> ALTER TABLE "scmtools_repository" ALTER COLUMN "visible" SET NOT NULL;
>>> ALTER TABLE "scmtools_repository" ALTER COLUMN "path" TYPE varchar(255)
>>> USING CAST("path" as varchar(255));
>>> ALTER TABLE "scmtools_repository" ALTER COLUMN "mirror_path" TYPE
>>> varchar(255) USING CAST("mirror_path" as varchar(255));
>>> ALTER TABLE "scmtools_repository" ALTER COLUMN "raw_file_url" TYPE
>>> varchar(255) USING CAST("raw_file_url" as varchar(255));
>>>
>>>  update siteconfig_siteconfiguration set settings='[redacted]';
>>> ```
>>>
>>> -Zach
>>>
>>> On Wed, Feb 11, 2015 at 5:18 PM, Zach Auclair <zach...@gmail.com> wrote:
>>>
>>>> Hey Christian,
>>>>
>>>> I ran...
>>>>
>>>> `pg_dump --host dbhost --dbname reviewboard --username reviewboard
>>>> --schema-only > schema-recreate.sql`
>>>> `pg_dump --data-only --table django_project_version --table
>>>> django_evolution --host dbhost --dbname reviewboard --username reviewboard
>>>> > django-table-data-import.sql`
>>>>
>>>> ... and have attached the data.
>>>>
>>>> Please let me know if you have a more explicit / different way you want
>>>> the data.
>>>>
>>>> -Zach
>>>>
>>>> On Wed, Feb 11, 2015 at 4:22 PM, Christian Hammond <
>>>> christ...@beanbaginc.com> wrote:
>>>>
>>>>> Hi Zach,
>>>>>
>>>>> I wouldn't need any actual confidential data. Just the table schema
>>>>> and the contents of the django_evolution and django_project_version tables
>>>>> (which solely contain information on the schema, and nothing confidential
>>>>> of any sort).
>>>>>
>>>>> Christian
>>>>>
>>>>> --
>>>>> Christian Hammond - christ...@beanbaginc.com
>>>>> Review Board - https://www.reviewboard.org
>>>>> Beanbag, Inc. - https://www.beanbaginc.com
>>>>>
>>>>> -----Original Message-----
>>>>> From: Zach <zach...@gmail.com>
>>>>> Reply: Zach <zach...@gmail.com>>
>>>>> Date: February 11, 2015 at 1:20:29 PM
>>>>> To: reviewboard@googlegroups.com <reviewboard@googlegroups.com>>
>>>>> Cc: christ...@beanbaginc.com <christ...@beanbaginc.com>>
>>>>> Subject:  Re: Issue Migrating Database from 1.5.5 to 2.0.5 (model
>>>>> updates fail)
>>>>>
>>>>> > Hey Christian,
>>>>> >
>>>>> > Sorry for the long delay between responses - I've had to put this
>>>>> project
>>>>> > on the back-burner for the time being. I am extremely appreciative
>>>>> of the
>>>>> > time you've been able to spend trying to help us with this issue
>>>>> (after
>>>>> > all, we would love to use the new reviewboard 2.X with gitlab!).
>>>>> >
>>>>> > In terms of the raw dump, what tables actually need to have rows in
>>>>> them? I
>>>>> > ask this because I will have to check with we are allowed to send
>>>>> some of
>>>>> > our information (if it's anything other than the table definition,
>>>>> and the
>>>>> > django rows / reviewboard settings, etc).
>>>>> >
>>>>> > -Zach
>>>>> >
>>>>> > On Tuesday, August 26, 2014 at 5:09:04 AM UTC-4, Christian Hammond
>>>>> wrote:
>>>>> > >
>>>>> > > Hi Zach,
>>>>> > >
>>>>> > > I know this isn't going quick. We had a big upgrade to
>>>>> RBCommons.com to
>>>>> > > prepare for and execute, and a number of premium support tickets
>>>>> we've been
>>>>> > > dealing with, so I'm behind on the community list.
>>>>> > >
>>>>> > > I took a look at the dumps, but unfortunately they're not useful
>>>>> to me.
>>>>> > > I'll need actual raw SQL dumps that I can directly import into a
>>>>> Postgres
>>>>> > > database. Would you be able to provide an importable SQL dump?
>>>>> > >
>>>>> > > - Christian
>>>>> > >
>>>>> > > --
>>>>> > > Christian Hammond - chri...@beanbaginc.com
>>>>> > > Review Board - http://www.reviewboard.org
>>>>> > > Beanbag, Inc. - http://www.beanbaginc.com
>>>>> > >
>>>>> > >
>>>>> > > On Thu, Aug 21, 2014 at 3:03 PM, Zach Auclair > > > wrote:
>>>>> > >
>>>>> > >> Christian,
>>>>> > >>
>>>>> > >> I've attached the data that you requested.
>>>>> > >>
>>>>> > >> -Zach
>>>>> > >>
>>>>> > >>
>>>>> > >> On Thu, Aug 21, 2014 at 4:41 PM, Christian Hammond <
>>>>> > >> chri...@beanbaginc.com > wrote:
>>>>> > >>
>>>>> > >>> Hi Zach,
>>>>> > >>>
>>>>> > >>> Sorry, I haven’t had a chance yet.
>>>>> > >>>
>>>>> > >>> I just glanced through and the schema does look correct, as does
>>>>> the
>>>>> > >>> list of applied evolutions. Can you get me the contents of your
>>>>> > >>> django_project_version and django_evolution tables? That’ll give
>>>>> me a
>>>>> > >>> better understanding of how Django Evolution thinks the world
>>>>> looks.
>>>>> > >>>
>>>>> > >>> Christian
>>>>> > >>>
>>>>> > >>> --
>>>>> > >>> Christian Hammond - chri...@beanbaginc.com
>>>>> > >>> Review Board - http://www.reviewboard.org
>>>>> > >>> Beanbag, Inc. - http://www.beanbaginc.com
>>>>> > >>>
>>>>> > >>> On August 21, 2014 at 1:24:01 PM, Zach Auclair (zac...@gmail.com
>>>>> > >>> ) wrote:
>>>>> > >>>
>>>>> > >>> Hey Christian,
>>>>> > >>>
>>>>> > >>> Have you had a chance to look into this? Is there any other
>>>>> information
>>>>> > >>> I can get you?
>>>>> > >>>
>>>>> > >>> -Zach
>>>>> > >>>
>>>>> > >>>
>>>>> > >>>
>>>>> > >>> On Fri, Aug 15, 2014 at 10:11 PM, Zach Auclair > >>> > wrote:
>>>>> > >>>
>>>>> > >>>> Hi Chris,
>>>>> > >>>>
>>>>> > >>>> The output of the "list-evolutions" command is actually
>>>>> included in my
>>>>> > >>>> last paragraph in the original post - see "*... in
>>>>> "list-evolutions"
>>>>> > >>>> form.*"
>>>>> > >>>>
>>>>> > >>>> I have attached the current schema generated by `pg_dump
>>>>> --schema-only
>>>>> > >>>> ...`.
>>>>> > >>>>
>>>>> > >>>>
>>>>> > >>>> On Fri, Aug 15, 2014 at 4:37 PM, Christian Hammond <
>>>>> > >>>> chri...@beanbaginc.com > wrote:
>>>>> > >>>>
>>>>> > >>>>> Hmm, that shouldn’t be happening. Can you run this and show me
>>>>> what
>>>>> > >>>>> you see:
>>>>> > >>>>>
>>>>> > >>>>> $ rb-site manage /path/to/site list-evolutions
>>>>> > >>>>>
>>>>> > >>>>> Also, can you dump the schema of your database and attach it?
>>>>> > >>>>>
>>>>> > >>>>> - Christian
>>>>> > >>>>>
>>>>> > >>>>> --
>>>>> > >>>>> Christian Hammond - chri...@beanbaginc.com
>>>>> > >>>>> Review Board - http://www.reviewboard.org
>>>>> > >>>>> Beanbag, Inc. - http://www.beanbaginc.com
>>>>> > >>>>>
>>>>> > >>>>> On August 15, 2014 at 12:11:45 PM, Zach (zac...@gmail.com
>>>>> > >>>>> ) wrote:
>>>>> > >>>>>
>>>>> > >>>>> I'm trying to "rb-site upgrade" an old 1.5.5 database to 2.0.5.
>>>>> > >>>>>
>>>>> > >>>>> *This fails with:*
>>>>> > >>>>>
>>>>> > >>>>> Rebuilding directory structure
>>>>> > >>>>> Updating database. This may take a while.
>>>>> > >>>>>
>>>>> > >>>>> The log output below, including warnings and errors,
>>>>> > >>>>> can be ignored unless upgrade fails.
>>>>> > >>>>>
>>>>> > >>>>> ------------------ ------------------
>>>>> > >>>>> Creating tables ...
>>>>> > >>>>> There are unapplied evolutions for auth.
>>>>> > >>>>> There are unapplied evolutions for contenttypes.
>>>>> > >>>>> There are unapplied evolutions for sessions.
>>>>> > >>>>> There are unapplied evolutions for accounts.
>>>>> > >>>>> There are unapplied evolutions for changedescs.
>>>>> > >>>>> There are unapplied evolutions for diffviewer.
>>>>> > >>>>> There are unapplied evolutions for reviews.
>>>>> > >>>>> There are unapplied evolutions for scmtools.
>>>>> > >>>>> Project signature has changed - an evolution is required
>>>>> > >>>>> Installing custom SQL ...
>>>>> > >>>>> Installing indexes ...
>>>>> > >>>>> Installed 0 object(s) from 0 fixture(s)
>>>>> > >>>>> The stored evolutions do not completely resolve all model
>>>>> changes.
>>>>> > >>>>>
>>>>> > >>>>> Run `./manage.py evolve --hint` to see a suggestion for the
>>>>> changes
>>>>> > >>>>> required.
>>>>> > >>>>>
>>>>> > >>>>> The following are the changes that could not be resolved:
>>>>> > >>>>> The application markup has been deleted
>>>>> > >>>>> In model reviews.DefaultReviewer:
>>>>> > >>>>> In field 'repository':
>>>>> > >>>>> Property 'null' has changed
>>>>> > >>>>> In model reviews.ReviewRequest:
>>>>> > >>>>> In field 'repository':
>>>>> > >>>>> Property 'null' has changed
>>>>> > >>>>> CommandError: Your models contain changes that Django
>>>>> Evolution cannot
>>>>> > >>>>> resolve automatically.
>>>>> > >>>>>
>>>>> > >>>>>
>>>>> > >>>>> *The suggested --hint's are:*
>>>>> > >>>>>
>>>>> > >>>>> #----- Evolution for auth
>>>>> > >>>>> from django_evolution.mutations import ChangeMeta, DeleteModel
>>>>> > >>>>>
>>>>> > >>>>>
>>>>> > >>>>> MUTATIONS = [
>>>>> > >>>>> ChangeMeta('Permission', 'unique_together', ((u'content_type',
>>>>> > >>>>> u'codename'),)),
>>>>> > >>>>> DeleteModel('Message')
>>>>> > >>>>> ]
>>>>> > >>>>> #----------------------
>>>>> > >>>>> #----- Evolution for contenttypes
>>>>> > >>>>> from django_evolution.mutations import ChangeMeta
>>>>> > >>>>>
>>>>> > >>>>>
>>>>> > >>>>> MUTATIONS = [
>>>>> > >>>>> ChangeMeta('ContentType', 'unique_together', (('app_label',
>>>>> > >>>>> 'model'),))
>>>>> > >>>>> ]
>>>>> > >>>>> #----------------------
>>>>> > >>>>> #----- Evolution for sessions
>>>>> > >>>>> from django_evolution.mutations import ChangeField
>>>>> > >>>>>
>>>>> > >>>>>
>>>>> > >>>>> MUTATIONS = [
>>>>> > >>>>> ChangeField('Session', 'expire_date', initial=None,
>>>>> db_index=True)
>>>>> > >>>>> ]
>>>>> > >>>>> #----------------------
>>>>> > >>>>> #----- Evolution for accounts
>>>>> > >>>>> from django_evolution.mutations import AddField, ChangeMeta,
>>>>> > >>>>> DeleteField
>>>>> > >>>>> from django.db import models
>>>>> > >>>>> from djblets.db.fields import JSONField
>>>>> > >>>>>
>>>>> > >>>>>
>>>>> > >>>>> MUTATIONS = [
>>>>> > >>>>> AddField('Profile', 'should_send_email', models.BooleanField,
>>>>> > >>>>> initial=True),
>>>>> > >>>>> AddField('Profile', 'timezone', models.CharField,
>>>>> initial=u'UTC',
>>>>> > >>>>> max_length=30),
>>>>> > >>>>> AddField('Profile', 'open_an_issue', models.BooleanField,
>>>>> > >>>>> initial=True),
>>>>> > >>>>> AddField('Profile', 'extra_data', JSONField, null=True),
>>>>> > >>>>> AddField('Profile', 'show_closed', models.BooleanField,
>>>>> > >>>>> initial=True),
>>>>> > >>>>> AddField('Profile', 'is_private', models.BooleanField,
>>>>> > >>>>> initial=False),
>>>>> > >>>>> DeleteField('Profile', 'show_submitted'),
>>>>> > >>>>> ChangeMeta('ReviewRequestVisit', 'unique_together', ((u'user',
>>>>> > >>>>> u'review_request'),))
>>>>> > >>>>> ]
>>>>> > >>>>> #----------------------
>>>>> > >>>>> #----- Evolution for changedescs
>>>>> > >>>>> from django_evolution.mutations import AddField
>>>>> > >>>>> from django.db import models
>>>>> > >>>>>
>>>>> > >>>>>
>>>>> > >>>>> MUTATIONS = [
>>>>> > >>>>> AddField('ChangeDescription', 'rich_text', models.BooleanField,
>>>>> > >>>>> initial=True)
>>>>> > >>>>> ]
>>>>> > >>>>> #----------------------
>>>>> > >>>>> CommandError: Cannot use hinted evolution: AddField or
>>>>> ChangeField
>>>>> > >>>>> mutation for 'FileDiff.status' in 'diffviewer' requires
>>>>> user-specified
>>>>> > >>>>> initial value.
>>>>> > >>>>>
>>>>> > >>>>> *The completed evolutions are:*
>>>>> > >>>>>
>>>>> > >>>>> reviewboard=> select * from django_evolution;
>>>>> > >>>>> id | version_id | app_label | label
>>>>> > >>>>>
>>>>> > >>>>>
>>>>> ----+------------+-------------+---------------------------------------------
>>>>> > >>>>> 1 | 4 | diffviewer | add_parent_diffs
>>>>> > >>>>> 2 | 4 | reviews | change_descriptions
>>>>> > >>>>> 3 | 4 | scmtools | bugzilla_url_charfield
>>>>> > >>>>> 4 | 5 | attachments | file_attachment_orig_filename
>>>>> > >>>>> 5 | 5 | attachments | file_attachment_file_max_length_512
>>>>> > >>>>> 6 | 5 | attachments | file_attachment_repo_info
>>>>> > >>>>> 7 | 5 | attachments | file_attachment_repo_path_no_index
>>>>> > >>>>> 8 | 5 | attachments |
>>>>> > >>>>> file_attachment_repo_revision_max_length_64
>>>>> > >>>>> 9 | 5 | site | localsite_public
>>>>> > >>>>> 10 | 5 | hostingsvcs | account_hosting_url
>>>>> > >>>>> 11 | 5 | hostingsvcs | account_hosting_url_max_length_255
>>>>> > >>>>> 12 | 5 | hostingsvcs | account_unique_together_baseline
>>>>> > >>>>> (12 rows)
>>>>> > >>>>>
>>>>> > >>>>> reviewboard=> \d django_evolution
>>>>> > >>>>> Table "public.django_evolution"
>>>>> > >>>>> Column | Type |
>>>>> > >>>>> Modifiers
>>>>> > >>>>>
>>>>> > >>>>>
>>>>> ------------+------------------------+---------------------------------------------------------------
>>>>> > >>>>> id | integer | not null default
>>>>> > >>>>> nextval('django_evolution_id_seq'::regclass)
>>>>> > >>>>> version_id | integer | not null
>>>>> > >>>>> app_label | character varying(200) | not null
>>>>> > >>>>> label | character varying(100) | not null
>>>>> > >>>>> Indexes:
>>>>> > >>>>> "django_evolution_pkey" PRIMARY KEY, btree (id)
>>>>> > >>>>> "django_evolution_version_id" btree (version_id)
>>>>> > >>>>> Foreign-key constraints:
>>>>> > >>>>> "django_evolution_version_id_fkey" FOREIGN KEY (version_id)
>>>>> > >>>>> REFERENCES django_project_version(id) DEFERRABLE INITIALLY
>>>>> DEFERRED
>>>>> > >>>>>
>>>>> > >>>>> reviewboard=>
>>>>> > >>>>>
>>>>> > >>>>> *... in "list-evolutions" form:*
>>>>> > >>>>>
>>>>> > >>>>> Applied evolutions for 'attachments':
>>>>> > >>>>> file_attachment_orig_filename
>>>>> > >>>>> file_attachment_file_max_length_512
>>>>> > >>>>> file_attachment_repo_info
>>>>> > >>>>> file_attachment_repo_path_no_index
>>>>> > >>>>> file_attachment_repo_revision_max_length_64
>>>>> > >>>>>
>>>>> > >>>>> Applied evolutions for 'diffviewer':
>>>>> > >>>>> add_parent_diffs
>>>>> > >>>>>
>>>>> > >>>>> Applied evolutions for 'hostingsvcs':
>>>>> > >>>>> account_hosting_url
>>>>> > >>>>> account_hosting_url_max_length_255
>>>>> > >>>>> account_unique_together_baseline
>>>>> > >>>>>
>>>>> > >>>>> Applied evolutions for 'reviews':
>>>>> > >>>>> change_descriptions
>>>>> > >>>>>
>>>>> > >>>>> Applied evolutions for 'scmtools':
>>>>> > >>>>> bugzilla_url_charfield
>>>>> > >>>>>
>>>>> > >>>>> Applied evolutions for 'site':
>>>>> > >>>>> localsite_public
>>>>> > >>>>>
>>>>> > >>>>>
>>>>> > >>>>>
>>>>> > >>>>> --
>>>>> > >>>>> Get the Review Board Power Pack at
>>>>> > >>>>> http://www.reviewboard.org/powerpack/
>>>>> > >>>>> ---
>>>>> > >>>>> Sign up for Review Board hosting at RBCommons:
>>>>> https://rbcommons.com/
>>>>> > >>>>> ---
>>>>> > >>>>> Happy user? Let us know at http://www.reviewboard.org/users/
>>>>> > >>>>> ---
>>>>> > >>>>> You received this message because you are subscribed to the
>>>>> Google
>>>>> > >>>>> Groups "reviewboard" group.
>>>>> > >>>>> To unsubscribe from this group and stop receiving emails from
>>>>> it, send
>>>>> > >>>>> an email to reviewboard...@googlegroups.com .
>>>>> > >>>>> For more options, visit https://groups.google.com/d/optout.
>>>>> > >>>>>
>>>>> > >>>>>
>>>>> > >>>>
>>>>> > >>>
>>>>> > >> --
>>>>> > >> Get the Review Board Power Pack at
>>>>> http://www.reviewboard.org/powerpack/
>>>>> > >> ---
>>>>> > >> Sign up for Review Board hosting at RBCommons:
>>>>> https://rbcommons.com/
>>>>> > >> ---
>>>>> > >> Happy user? Let us know at http://www.reviewboard.org/users/
>>>>> > >> ---
>>>>> > >> You received this message because you are subscribed to the
>>>>> Google Groups
>>>>> > >> "reviewboard" group.
>>>>> > >> To unsubscribe from this group and stop receiving emails from it,
>>>>> send an
>>>>> > >> email to reviewboard...@googlegroups.com .
>>>>> > >> For more options, visit https://groups.google.com/d/optout.
>>>>> > >>
>>>>> > >
>>>>> > >
>>>>>
>>>>>
>>>>
>>>
>>
>

-- 
Supercharge your Review Board with Power Pack: 
https://www.reviewboard.org/powerpack/
Want us to host Review Board for you? Check out RBCommons: 
https://rbcommons.com/
Happy user? Let us know! https://www.reviewboard.org/users/
--- 
You received this message because you are subscribed to the Google Groups 
"reviewboard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to reviewboard+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to