Add root comments APIs
Review Request #12037 — Created Feb. 4, 2022 and discarded
- Registered root diff comments, root file attachment comments and root general comments API
- Support GET method for list resources with query parameter:
- Shared query parameters :
review-request-id=<review-request-id>
,review-id=<review-id>
,user=<user-username>
,is-reply
file-diff-id
,line
andinterdiff-revision
for diff comments, andfile-attachment-id
file-name
for file attachment comments- Unit tests suites for comments API
- Added added
webapi_request_fields
decorator toget_list
for request parameters documentation - Updated the WebAPI documentations
- Added unit tests for
diff-comment
,general-comment
andfile-attachment-comment
with list resource and GET method
Summary | ID | Author |
---|---|---|
7697a1e0439c7a09f66f69018512b1d9d62e586d | charlie-xiang | |
b2be67042a927571a7bb4d876632c28c576a5a41 | charlie-xiang | |
c3357d44d9b108848863dcc1f3e25fab012453e9 | charlie-xiang | |
26b7346d85eeb5e28094a56d7313e8d3ce575996 | charlie-xiang | |
31fbbc2ad10218658aab0518b2525c5ee27bf609 | charlie-xiang | |
c062506ea81a860c09d0b08baafcd5d88909e0fb | charlie-xiang | |
7ab70cc20ad219423ec49ade08b55e33c0e49853 | charlie-xiang | |
a35f5434b4190a51f9cae711695945d161113543 | charlie-xiang | |
5033f62280090aff629e91710f280cd346d36f58 | charlie-xiang | |
4870f7693329b6237d888408b38754a7b3077a52 | charlie-xiang | |
bf58ea40bd2d105d87bca9bdab64d58759037b61 | charlie-xiang |
Description | From | Last Updated |
---|---|---|
E501 line too long (85 > 79 characters) |
reviewbot | |
F401 'django.core.exceptions.ObjectDoesNotExist' imported but unused |
reviewbot | |
F401 'djblets.webapi.decorators.webapi_response_errors' imported but unused |
reviewbot | |
F401 'djblets.webapi.decorators.webapi_login_required' imported but unused |
reviewbot | |
F401 'djblets.webapi.decorators.webapi_request_fields' imported but unused |
reviewbot | |
F401 'djblets.webapi.errors.PERMISSION_DENIED' imported but unused |
reviewbot | |
F401 'djblets.webapi.errors.INVALID_FORM_DATA' imported but unused |
reviewbot | |
F401 'djblets.webapi.errors.NOT_LOGGED_IN' imported but unused |
reviewbot | |
F401 'djblets.webapi.errors.DOES_NOT_EXIST' imported but unused |
reviewbot | |
F401 'djblets.webapi.fields.IntFieldType' imported but unused |
reviewbot | |
F401 'reviewboard.diffviewer.models.FileDiff' imported but unused |
reviewbot | |
F401 'reviewboard.webapi.resources.resources' imported but unused |
reviewbot | |
W293 blank line contains whitespace |
reviewbot | |
E265 block comment should start with '# ' |
reviewbot | |
W293 blank line contains whitespace |
reviewbot | |
E122 continuation line missing indentation or outdented |
reviewbot | |
E122 continuation line missing indentation or outdented |
reviewbot | |
E122 continuation line missing indentation or outdented |
reviewbot | |
F401 'django.core.exceptions.ObjectDoesNotExist' imported but unused |
reviewbot | |
F401 'djblets.util.decorators.augment_method_from' imported but unused |
reviewbot | |
F401 'djblets.webapi.decorators.webapi_response_errors' imported but unused |
reviewbot | |
F401 'djblets.webapi.decorators.webapi_login_required' imported but unused |
reviewbot | |
F401 'djblets.webapi.decorators.webapi_request_fields' imported but unused |
reviewbot | |
F401 'djblets.webapi.errors.PERMISSION_DENIED' imported but unused |
reviewbot | |
F401 'djblets.webapi.errors.INVALID_FORM_DATA' imported but unused |
reviewbot | |
F401 'djblets.webapi.errors.NOT_LOGGED_IN' imported but unused |
reviewbot | |
F401 'djblets.webapi.errors.DOES_NOT_EXIST' imported but unused |
reviewbot | |
F401 'reviewboard.webapi.decorators.webapi_check_local_site' imported but unused |
reviewbot | |
F401 'reviewboard.webapi.resources.resources' imported but unused |
reviewbot | |
E225 missing whitespace around operator |
reviewbot | |
E999 SyntaxError: invalid syntax |
reviewbot | |
E999 SyntaxError: invalid syntax |
reviewbot | |
W291 trailing whitespace |
reviewbot | |
E999 SyntaxError: invalid syntax |
reviewbot | |
E999 SyntaxError: invalid syntax |
reviewbot | |
E999 SyntaxError: invalid syntax |
reviewbot | |
W291 trailing whitespace |
reviewbot | |
This is getting long enough that we should just wrap and list one argument per line. |
david | |
While you're here, mind updating this docstring to follow our modern standards? "Returns" -> "Return", and add "Args" and "Returns" … |
david | |
Instead of doing this, let's avoid listing review_request_id in the args list, and pull it out for our local use: … |
david | |
Same comments here re: kwargs. |
david | |
New files on master won't require the unicode_literals import, but we would like to include module docstrings at the top … |
david | |
Same here re: unicode_literals, docstrings. |
david | |
Same here re: unicode_literals, docstrings. |
david | |
Same here re: unicode_literals, docstrings. |
david | |
E999 SyntaxError: invalid syntax |
reviewbot | |
And here. |
david | |
E999 SyntaxError: invalid syntax |
reviewbot | |
And here. |
david | |
E999 SyntaxError: invalid syntax |
reviewbot | |
E999 SyntaxError: invalid syntax |
reviewbot | |
E999 SyntaxError: invalid syntax |
reviewbot | |
E999 SyntaxError: invalid syntax |
reviewbot | |
E999 SyntaxError: invalid syntax |
reviewbot | |
E999 SyntaxError: invalid syntax |
reviewbot | |
E999 SyntaxError: invalid syntax |
reviewbot | |
W291 trailing whitespace |
reviewbot | |
W291 trailing whitespace |
reviewbot | |
W291 trailing whitespace |
reviewbot | |
W291 trailing whitespace |
reviewbot | |
W291 trailing whitespace |
reviewbot | |
E999 SyntaxError: invalid syntax |
reviewbot | |
E999 SyntaxError: invalid syntax |
reviewbot | |
E999 SyntaxError: invalid syntax |
reviewbot | |
I think there is a typo here. Should it be "list" resources? |
sheenaNg | |
I know it was like this before, but can you add a docstring? |
david | |
Add a blank line after this. |
david | |
dict.get() returns None if the key doesn't exist, so we can simplify: if kwargs.get('review_request_id') is not None: |
david | |
I know it was like this before, but can you add a docstring? |
david | |
Add a blank line after this. |
david | |
dict.get() returns None if the key doesn't exist, so we can simplify: if kwargs.get('review_request_id') is not None: |
david | |
Instead of having multiple return paths, let's just reassign q. Please also add a blank line above the return: ```python … |
david | |
It's not "different comments", it's "diff comments" :) |
david | |
Imports should be in three groups, separated by blank lines and alphabetized within: Standard library Third-party "Current" module (anything in … |
david | |
This is "new" right now but won't be new forever. Just call it "This top level ..." |
david | |
Add a blank line between these two. |
david | |
This should be in the imperative mood ("Return" instead of "Returns"). This docstring also needs an "Args" section. |
david | |
Add a blank line between these two. |
david | |
Can you add a line between these two lines? |
sheenaNg | |
This is something minor, you missed the period at the end of the description. |
sheenaNg | |
You missed the period at the end of the description. |
sheenaNg | |
This should be in the imperative mood. |
david | |
Same comments in this file as in the diff comments file. |
david | |
There should be a blank line after the class docstring. Can you add a blank line here? |
sheenaNg | |
Can you also add a blank line between these two lines? |
sheenaNg | |
Can you add a blank line after q = Q() and also after each if statement? |
sheenaNg | |
You missed the period at the end of the description. |
sheenaNg | |
You missed the period at the end of the description. |
sheenaNg | |
Same comments in this file as in the diff comments file. |
david | |
There should be a blank line after the class docstring. Can you add a blank line here? |
sheenaNg | |
Can you add a blank line between these two lines? |
sheenaNg | |
Can you add a blank line after q = Q() and also after each if statement? |
sheenaNg | |
You missed the period at the end of the description. |
sheenaNg | |
You missed the period at the end of the description. |
sheenaNg | |
I don't know that it makes sense to have new mimetypes for these endpoints, since the content is effectively the … |
david | |
There's an extra space before "Unit" |
david | |
No blank line here. Please also alphabetize the import list. |
david | |
E999 SyntaxError: invalid syntax |
reviewbot | |
Instead of writing "diff_comments/" in each of these docstrings, let's just put "<URL>/..." and then use the @webapi_test_template decorator. |
david | |
I think it is great overall. One suggestion: Would it be easier to read if you add some blank lines … |
sheenaNg | |
A few things here: Alphabetize the list No blank line within the section For the tests.urls import, put the import … |
david | |
E999 SyntaxError: invalid syntax |
reviewbot | |
Let's use @webapi_test_template for all these. |
david | |
I do not think there should be a blank line after function docstring. |
sheenaNg | |
Same comments here as in the other files. |
david | |
E999 SyntaxError: invalid syntax |
reviewbot | |
Let's use @webapi_test_template for all the docstrings here. |
david | |
I do not think there should be a blank line after function docstring. |
sheenaNg | |
E999 SyntaxError: invalid syntax |
reviewbot | |
E999 SyntaxError: invalid syntax |
reviewbot | |
E999 SyntaxError: invalid syntax |
reviewbot |
- Commits:
-
Summary ID Author 6ead118a5c814c3e85d03f98aa1349bb195c0ee7 charlie-xiang 6ead118a5c814c3e85d03f98aa1349bb195c0ee7 charlie-xiang 319cd6df612ef18096dc563ebfb8ec26ae48e340 charlie-xiang be7279791b2dd90f0c9dbd6fe5675589a30944e3 charlie-xiang - Diff:
-
Revision 2 (+798 -88)
- Commits:
-
Summary ID Author 6ead118a5c814c3e85d03f98aa1349bb195c0ee7 charlie-xiang 319cd6df612ef18096dc563ebfb8ec26ae48e340 charlie-xiang be7279791b2dd90f0c9dbd6fe5675589a30944e3 charlie-xiang 6ead118a5c814c3e85d03f98aa1349bb195c0ee7 charlie-xiang 319cd6df612ef18096dc563ebfb8ec26ae48e340 charlie-xiang be7279791b2dd90f0c9dbd6fe5675589a30944e3 charlie-xiang 4ad0f51bbad5d023a3e14929e493b409aafa9e2b charlie-xiang - Diff:
-
Revision 3 (+864 -110)
- Description:
-
- Registered root diff comments, root file attachment comments and root general comments API
~ - Support GET method for list resources with query parameter:
review-request-id
,review-id
~ - Support GET method for list resources with query parameter:
review-request-id=<review-request-id>
,review-id=<review-id>
,user=<user-username>
+ - Unit tests suites for comments API
- Testing Done:
-
~ No unit test was added. Will look into how unit testw work and set up tests for comments api next week
~ - Added unit tests for
diff-comment
+ - Still need to add tests for
general-comment
andfile-attachment-comment
- Added unit tests for
- Change Summary:
-
add more query parameters and added tests for general-comment and file-attachment-comment
- Description:
-
- Registered root diff comments, root file attachment comments and root general comments API
~ - Support GET method for list resources with query parameter:
review-request-id=<review-request-id>
,review-id=<review-id>
,user=<user-username>
~ - Support GET method for list resources with query parameter:
review-request-id=<review-request-id>
,review-id=<review-id>
,user=<user-username>
,file-diff-id
for diff comments, andfile-attachment-id
file-name
for file attachment comments
- Unit tests suites for comments API
- Testing Done:
-
~ - Added unit tests for
diff-comment
~ - Added unit tests for
diff-comment
,general-comment
andfile-attachment-comment
with list resource and GET method
- - Still need to add tests for
general-comment
andfile-attachment-comment
- Added unit tests for
- Commits:
-
Summary ID Author 6ead118a5c814c3e85d03f98aa1349bb195c0ee7 charlie-xiang 319cd6df612ef18096dc563ebfb8ec26ae48e340 charlie-xiang be7279791b2dd90f0c9dbd6fe5675589a30944e3 charlie-xiang 4ad0f51bbad5d023a3e14929e493b409aafa9e2b charlie-xiang 6ead118a5c814c3e85d03f98aa1349bb195c0ee7 charlie-xiang 319cd6df612ef18096dc563ebfb8ec26ae48e340 charlie-xiang be7279791b2dd90f0c9dbd6fe5675589a30944e3 charlie-xiang 4ad0f51bbad5d023a3e14929e493b409aafa9e2b charlie-xiang 85dac98dfa7185f4d2d8846de1e1415627c21908 charlie-xiang - Diff:
-
Revision 4 (+1720 -122)
- Change Summary:
-
add last-updated-from, to and is_reply filters
- Commits:
-
Summary ID Author 6ead118a5c814c3e85d03f98aa1349bb195c0ee7 charlie-xiang 319cd6df612ef18096dc563ebfb8ec26ae48e340 charlie-xiang be7279791b2dd90f0c9dbd6fe5675589a30944e3 charlie-xiang 4ad0f51bbad5d023a3e14929e493b409aafa9e2b charlie-xiang 85dac98dfa7185f4d2d8846de1e1415627c21908 charlie-xiang 6ead118a5c814c3e85d03f98aa1349bb195c0ee7 charlie-xiang 319cd6df612ef18096dc563ebfb8ec26ae48e340 charlie-xiang be7279791b2dd90f0c9dbd6fe5675589a30944e3 charlie-xiang 4ad0f51bbad5d023a3e14929e493b409aafa9e2b charlie-xiang 85dac98dfa7185f4d2d8846de1e1415627c21908 charlie-xiang 3b28c1cc1faf70a2790152a385c54cf8219a0683 charlie-xiang - Diff:
-
Revision 5 (+1827 -141)
-
Great start!
-
-
While you're here, mind updating this docstring to follow our modern standards? "Returns" -> "Return", and add "Args" and "Returns" sections to the bottom.
-
Instead of doing this, let's avoid listing
review_request_id
in the args list, and pull it out for our local use:def get_queryset(self, request, *args, **kwargs): review_request_id = kwargs.get('review_request_id', None)
Since we're not actually using the ID, we might even be able to just do:
if 'review_request_id' in kwargs: review_request = ... q = q.filter(...)
-
-
New files on
master
won't require theunicode_literals
import, but we would like to include module docstrings at the top of the file. -
-
-
-
-
- Change Summary:
-
Added tests for last-updated-to, last-updated-from, is-reply, fixed the review issues
- Commits:
-
Summary ID Author 6ead118a5c814c3e85d03f98aa1349bb195c0ee7 charlie-xiang 319cd6df612ef18096dc563ebfb8ec26ae48e340 charlie-xiang be7279791b2dd90f0c9dbd6fe5675589a30944e3 charlie-xiang 4ad0f51bbad5d023a3e14929e493b409aafa9e2b charlie-xiang 85dac98dfa7185f4d2d8846de1e1415627c21908 charlie-xiang 3b28c1cc1faf70a2790152a385c54cf8219a0683 charlie-xiang 6ead118a5c814c3e85d03f98aa1349bb195c0ee7 charlie-xiang 319cd6df612ef18096dc563ebfb8ec26ae48e340 charlie-xiang be7279791b2dd90f0c9dbd6fe5675589a30944e3 charlie-xiang 4ad0f51bbad5d023a3e14929e493b409aafa9e2b charlie-xiang 85dac98dfa7185f4d2d8846de1e1415627c21908 charlie-xiang 3b28c1cc1faf70a2790152a385c54cf8219a0683 charlie-xiang 1ca9fbaccae7ca5cabecb4083f604b0cee834683 charlie-xiang b075e5d5dbc4104ea376b3a8e521aabfb2109fb9 charlie-xiang - Diff:
-
Revision 6 (+2255 -161)
- Change Summary:
-
Added
webapi_request_fields
decorator toget_list
method for API GET parameters documentation - Commits:
-
Summary ID Author 6ead118a5c814c3e85d03f98aa1349bb195c0ee7 charlie-xiang 319cd6df612ef18096dc563ebfb8ec26ae48e340 charlie-xiang be7279791b2dd90f0c9dbd6fe5675589a30944e3 charlie-xiang 4ad0f51bbad5d023a3e14929e493b409aafa9e2b charlie-xiang 85dac98dfa7185f4d2d8846de1e1415627c21908 charlie-xiang 3b28c1cc1faf70a2790152a385c54cf8219a0683 charlie-xiang 1ca9fbaccae7ca5cabecb4083f604b0cee834683 charlie-xiang b075e5d5dbc4104ea376b3a8e521aabfb2109fb9 charlie-xiang 6ead118a5c814c3e85d03f98aa1349bb195c0ee7 charlie-xiang 319cd6df612ef18096dc563ebfb8ec26ae48e340 charlie-xiang be7279791b2dd90f0c9dbd6fe5675589a30944e3 charlie-xiang 4ad0f51bbad5d023a3e14929e493b409aafa9e2b charlie-xiang 85dac98dfa7185f4d2d8846de1e1415627c21908 charlie-xiang 3b28c1cc1faf70a2790152a385c54cf8219a0683 charlie-xiang 1ca9fbaccae7ca5cabecb4083f604b0cee834683 charlie-xiang b075e5d5dbc4104ea376b3a8e521aabfb2109fb9 charlie-xiang 302413cd2a943024693810e552cce733825de038 charlie-xiang - Diff:
-
Revision 7 (+2664 -182)
- Change Summary:
-
added
webapi_request_fields
decorator toget_list
and resource class docstring - Description:
-
- Registered root diff comments, root file attachment comments and root general comments API
~ - Support GET method for list resources with query parameter:
review-request-id=<review-request-id>
,review-id=<review-id>
,user=<user-username>
,file-diff-id
for diff comments, andfile-attachment-id
file-name
for file attachment comments
~ - Unit tests suites for comments API
~ - Support GET method for list resources with query parameter:
~ - Shared query parameters :
review-request-id=<review-request-id>
,review-id=<review-id>
,user=<user-username>
,is-reply
+ file-diff-id
,line
andinterdiff-revision
for diff comments, andfile-attachment-id
file-name
for file attachment comments
+ - Unit tests suites for comments API
+ - Added added
webapi_request_fields
decorator toget_list
for request parameters documentation
+ - Added resource class docstrings.
- Commits:
-
Summary ID Author 6ead118a5c814c3e85d03f98aa1349bb195c0ee7 charlie-xiang 319cd6df612ef18096dc563ebfb8ec26ae48e340 charlie-xiang be7279791b2dd90f0c9dbd6fe5675589a30944e3 charlie-xiang 4ad0f51bbad5d023a3e14929e493b409aafa9e2b charlie-xiang 85dac98dfa7185f4d2d8846de1e1415627c21908 charlie-xiang 3b28c1cc1faf70a2790152a385c54cf8219a0683 charlie-xiang 1ca9fbaccae7ca5cabecb4083f604b0cee834683 charlie-xiang b075e5d5dbc4104ea376b3a8e521aabfb2109fb9 charlie-xiang 302413cd2a943024693810e552cce733825de038 charlie-xiang 6ead118a5c814c3e85d03f98aa1349bb195c0ee7 charlie-xiang 319cd6df612ef18096dc563ebfb8ec26ae48e340 charlie-xiang be7279791b2dd90f0c9dbd6fe5675589a30944e3 charlie-xiang 4ad0f51bbad5d023a3e14929e493b409aafa9e2b charlie-xiang 85dac98dfa7185f4d2d8846de1e1415627c21908 charlie-xiang 3b28c1cc1faf70a2790152a385c54cf8219a0683 charlie-xiang 1ca9fbaccae7ca5cabecb4083f604b0cee834683 charlie-xiang b075e5d5dbc4104ea376b3a8e521aabfb2109fb9 charlie-xiang b84f8c26fa21f60439c6fa54cc4f0d1a7c3289bf charlie-xiang - Diff:
-
Revision 8 (+2700 -182)
- Change Summary:
-
update to use parsed parameters and added doc tree
- Commits:
-
Summary ID Author 6ead118a5c814c3e85d03f98aa1349bb195c0ee7 charlie-xiang 319cd6df612ef18096dc563ebfb8ec26ae48e340 charlie-xiang be7279791b2dd90f0c9dbd6fe5675589a30944e3 charlie-xiang 4ad0f51bbad5d023a3e14929e493b409aafa9e2b charlie-xiang 85dac98dfa7185f4d2d8846de1e1415627c21908 charlie-xiang 3b28c1cc1faf70a2790152a385c54cf8219a0683 charlie-xiang 1ca9fbaccae7ca5cabecb4083f604b0cee834683 charlie-xiang b075e5d5dbc4104ea376b3a8e521aabfb2109fb9 charlie-xiang b84f8c26fa21f60439c6fa54cc4f0d1a7c3289bf charlie-xiang 44288f2e38715f36d3fe785d1a37cf431c58dd9e charlie-xiang e95ff3fa71a355454f66cd5ab76b4f600a2bd479 charlie-xiang f99ddf9ce372cf9d8152cf0be0eb536f9c4d5375 charlie-xiang 6384876fee680c473c4174cfce2e74417e5876f1 charlie-xiang 03f77eb15a8086d59b88a1d68e1f337a6188172f charlie-xiang b9c04bb7e6e2f9849c9918c50d8c3b2023e28909 charlie-xiang 4c07e01cd4943277a946e130a414b888c02d74a9 charlie-xiang f886553f0031fce678d428573cde46d82165e975 charlie-xiang a09404b357879088b64add7b870a4c37b56c34b7 charlie-xiang c11bf2d737548101f44ea7a92e9469b20cde8a3d charlie-xiang - Diff:
-
Revision 9 (+2770 -248)
- Summary:
-
[WIP]: Add root comments APIsAdd root comments APIs
- Description:
-
- Registered root diff comments, root file attachment comments and root general comments API
- Support GET method for list resources with query parameter:
- Shared query parameters :
review-request-id=<review-request-id>
,review-id=<review-id>
,user=<user-username>
,is-reply
file-diff-id
,line
andinterdiff-revision
for diff comments, andfile-attachment-id
file-name
for file attachment comments
- Unit tests suites for comments API
- Added added
webapi_request_fields
decorator toget_list
for request parameters documentation
~ - Added resource class docstrings.
~ - Updated the WebAPI documentations
-
-
-
-
dict.get()
returnsNone
if the key doesn't exist, so we can simplify:if kwargs.get('review_request_id') is not None:
-
-
-
dict.get()
returnsNone
if the key doesn't exist, so we can simplify:if kwargs.get('review_request_id') is not None:
-
Instead of having multiple return paths, let's just reassign
q
. Please also add a blank line above the return:```python
q = q.filter(
Q(review__review_request=review_request))return q
-
-
Imports should be in three groups, separated by blank lines and alphabetized within:
- Standard library
- Third-party
- "Current" module (anything in
reviewboard
).
There aren't any for group 1, so in this case, we should have two:
- All django and djblets imports
- All review board imports
-
-
-
This should be in the imperative mood ("Return" instead of "Returns"). This docstring also needs an "Args" section.
-
-
-
-
-
I don't know that it makes sense to have new mimetypes for these endpoints, since the content is effectively the same as the other endpoints for the same objects.
-
-
-
Instead of writing "diff_comments/" in each of these docstrings, let's just put "<URL>/..." and then use the
@webapi_test_template
decorator. -
A few things here:
- Alphabetize the list
- No blank line within the section
- For the tests.urls import, put the
import
on the first line rather than the second.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
I think it is great overall.
One suggestion: Would it be easier to read if you add some blank lines to separate different groups of codes?For example, add blank line after the codes to create diff_review, reviews/ comments and before calling the API endpoint. Then, add another blank line after calling the API endpoint and before the assertions.
This could be applied to the rest of the unit tests in multiple files.
-
-
- Change Summary:
-
worked on review comments
- Commits:
-
Summary ID Author 44288f2e38715f36d3fe785d1a37cf431c58dd9e charlie-xiang e95ff3fa71a355454f66cd5ab76b4f600a2bd479 charlie-xiang f99ddf9ce372cf9d8152cf0be0eb536f9c4d5375 charlie-xiang 6384876fee680c473c4174cfce2e74417e5876f1 charlie-xiang 03f77eb15a8086d59b88a1d68e1f337a6188172f charlie-xiang b9c04bb7e6e2f9849c9918c50d8c3b2023e28909 charlie-xiang 4c07e01cd4943277a946e130a414b888c02d74a9 charlie-xiang f886553f0031fce678d428573cde46d82165e975 charlie-xiang a09404b357879088b64add7b870a4c37b56c34b7 charlie-xiang c11bf2d737548101f44ea7a92e9469b20cde8a3d charlie-xiang 7697a1e0439c7a09f66f69018512b1d9d62e586d charlie-xiang b2be67042a927571a7bb4d876632c28c576a5a41 charlie-xiang c3357d44d9b108848863dcc1f3e25fab012453e9 charlie-xiang 26b7346d85eeb5e28094a56d7313e8d3ce575996 charlie-xiang 31fbbc2ad10218658aab0518b2525c5ee27bf609 charlie-xiang c062506ea81a860c09d0b08baafcd5d88909e0fb charlie-xiang 7ab70cc20ad219423ec49ade08b55e33c0e49853 charlie-xiang a35f5434b4190a51f9cae711695945d161113543 charlie-xiang 5033f62280090aff629e91710f280cd346d36f58 charlie-xiang 4870f7693329b6237d888408b38754a7b3077a52 charlie-xiang bf58ea40bd2d105d87bca9bdab64d58759037b61 charlie-xiang - Diff:
-
Revision 10 (+3190 -370)