Skip to content
This repository

[Form] add guess pattern #3927

Merged
merged 0 commits into from almost 2 years ago

9 participants

Julien 'ruian' Galenski Joseph Bielawski Victor Berchet Christophe Coevoet Jordan Alliot Bernhard Schussek Drak Lukas Kahwe Smith Marco Pivetta
Julien 'ruian' Galenski
ruian commented April 13, 2012

Bug fix: no
Feature addition: yes
Backwards compatibility break: no
Symfony2 tests pass: yes
Fixes the following tickets: #3766
Todo: -

Joseph Bielawski

You need to revert change of permissions.

src/Symfony/Bridge/Doctrine/Form/DoctrineOrmTypeGuesser.php
... ...
@@ -16,6 +16,7 @@
1
Christophe Coevoet Collaborator
stof added a note April 13, 2012

please revert all permission changes

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
src/Symfony/Bridge/Doctrine/Form/DoctrineOrmTypeGuesser.php
... ...
@@ -16,6 +16,7 @@
16 16
 use Symfony\Component\Form\Guess\Guess;
17 17
 use Symfony\Component\Form\Guess\TypeGuess;
18 18
 use Symfony\Component\Form\Guess\ValueGuess;
  19
+use Symfony\Component\Form\Guess\PatternGuess;
1
Christophe Coevoet Collaborator
stof added a note April 13, 2012

this class is not used

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
src/Symfony/Bridge/Propel1/Form/PropelTypeGuesser.php
... ...
@@ -15,6 +15,7 @@
15 15
 use Symfony\Component\Form\Guess\Guess;
16 16
 use Symfony\Component\Form\Guess\TypeGuess;
17 17
 use Symfony\Component\Form\Guess\ValueGuess;
  18
+use Symfony\Component\Form\Guess\PatternGuess;
1
Christophe Coevoet Collaborator
stof added a note April 13, 2012

unused here too

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
src/Symfony/Component/Form/Extension/Validator/ValidatorTypeGuesser.php
... ...
@@ -233,6 +246,21 @@ public function guessMinLengthForConstraint(Constraint $constraint)
233 246
     }
234 247
 
235 248
     /**
  249
+     * Guesses a field's pattern based on the given constraint
  250
+     *
  251
+     * @param  Constraint $constraint  The constraint to guess for
  252
+     *
  253
+     * @return Guess       The guess for the pattern
  254
+     */
  255
+    public function guessPatternForConstraint(Constraint $constraint)
  256
+    {
  257
+        switch (get_class($constraint)) {
1
Joseph Bielawski
stloyd added a note April 13, 2012

switch ? For one case ?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Victor Berchet
vicb commented April 13, 2012

Some file permissions have been changed in your commit, they should be reverted

src/Symfony/Component/Form/FormTypeGuesserChain.php
... ...
@@ -68,6 +68,13 @@ public function guessMinLength($class, $property)
68 68
         });
69 69
     }
70 70
 
  71
+    public function guessPattern($class, $property)
1
Joseph Bielawski
stloyd added a note April 13, 2012

You should add {@inheritDoc}.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
src/Symfony/Component/Form/Tests/FormFactoryTest.php
((12 lines not shown))
552  
-        $author->firstName = 'John';
553  
-        $author->setLastName('Smith');
554  
-
555  
-        $this->assertEquals($author, $form->getData());
  578
+    public function testFieldTypeCreatesDefaultValueForEmptyDataOption()
  579
+    {
  580
+        $factory = new FormFactory(array(new \Symfony\Component\Form\Extension\Core\CoreExtension()));
  581
+
  582
+        $form = $factory->createNamedBuilder(new AuthorType(), 'author')->getForm();
  583
+        $form->bind(array('firstName' => 'John', 'lastName' => 'Smith'));
  584
+
  585
+        $author = new Author();
  586
+        $author->firstName = 'John';
  587
+        $author->setLastName('Smith');
  588
+
  589
+        $this->assertEquals($author, $form->getData());
5
Joseph Bielawski
stloyd added a note April 13, 2012

What was change here ?

Marco Pivetta
Ocramius added a note April 13, 2012

Loading with ?w=0 shows no diff, so whitespace I guess

Julien 'ruian' Galenski
ruian added a note April 13, 2012

I don't know why it shows diff here...

Bernhard Schussek Collaborator
webmozart added a note April 22, 2012

Can revert this hunk? I think you can do this like:

git checkout -p -- src/Symfony/Component/Form/Tests/FormFactoryTest.php

and then only select this hunk.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
src/Symfony/Component/Form/Tests/FormFactoryTest.php
((11 lines not shown))
  502
+                    Guess::MEDIUM_CONFIDENCE
  503
+                )));
  504
+
  505
+        $this->guesser2->expects($this->once())
  506
+                ->method('guessPattern')
  507
+                ->with('Application\Author', 'firstName')
  508
+                ->will($this->returnValue(new PatternGuess(
  509
+                    '/[a-z-A-Z]/',
  510
+                    Guess::HIGH_CONFIDENCE
  511
+                )));
  512
+
  513
+        $factory = $this->createMockFactory(array('createNamedBuilder'));
  514
+
  515
+        $factory->expects($this->once())
  516
+            ->method('createNamedBuilder')
  517
+            ->with('text', 'firstName', null, array('pattern' => '/[a-z-A-Z]/'))
1
Victor Berchet
vicb added a note April 13, 2012

should be \- in the middle ?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Julien 'ruian' Galenski
ruian commented April 13, 2012

What do you mean by "please revert all permission changes" because i did not change any permissions by myself :/

Christophe Coevoet
Collaborator
stof commented April 13, 2012

@ruian which OS are you using ? If you are on windows, you should configure git to ignore file permissions (as Windows cannot handle them). Msysgit should do it by default but some other tools don't configure git this way: http://stackoverflow.com/questions/6476513/git-file-permissions-on-windows-7

Julien 'ruian' Galenski
ruian commented April 13, 2012

@stof i'm on linux but i did not change any chmod or chown since a clone the repo

Christophe Coevoet
Collaborator
stof commented April 13, 2012

@ruian In your pull request, you are changing file permissions from 644 to 755. This is what should be reverted

src/Symfony/Component/Form/Extension/Validator/ValidatorTypeGuesser.php
... ...
@@ -233,6 +246,21 @@ public function guessMinLengthForConstraint(Constraint $constraint)
233 246
     }
234 247
 
235 248
     /**
  249
+     * Guesses a field's pattern based on the given constraint
  250
+     *
  251
+     * @param  Constraint $constraint  The constraint to guess for
  252
+     *
  253
+     * @return Guess       The guess for the pattern
  254
+     */
  255
+    public function guessPatternForConstraint(Constraint $constraint)
  256
+    {
  257
+        switch (get_class($constraint)) {
  258
+            case 'Symfony\Component\Validator\Constraints\MaxLength':
2
Jordan Alliot
jalliot added a note April 13, 2012

Don't you mean Regex?

Julien 'ruian' Galenski
ruian added a note April 13, 2012

Fixed

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
src/Symfony/Component/Form/FormFactory.php
... ...
@@ -329,13 +329,14 @@ public function createBuilderForProperty($class, $property, $data = null, array
329 329
         $typeGuess = $this->guesser->guessType($class, $property);
330 330
         $maxLengthGuess = $this->guesser->guessMaxLength($class, $property);
331 331
         $minLengthGuess = $this->guesser->guessMinLength($class, $property);
332  
-        $requiredGuess = $this->guesser->guessRequired($class, $property);
  332
+        $requiredGuess  = $this->guesser->guessRequired($class, $property);
2
Christophe Coevoet Collaborator
stof added a note April 13, 2012

why changing this line ? We don't align = in Symfony. It makes updates painful (changing many lines when you add a new longer key), and you don't align the whole block anyway

Julien 'ruian' Galenski
ruian added a note April 13, 2012

ah ok, i will revert it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Christophe Coevoet
Collaborator
stof commented April 13, 2012

Can you squash your commits ?

Julien 'ruian' Galenski
ruian commented April 13, 2012

you mean rebase ? If it the case i have never test

Jordan Alliot

Look at the doc at the end of the page ;)

Julien 'ruian' Galenski
ruian commented April 13, 2012

Yep i will look at it

Julien 'ruian' Galenski
ruian commented April 13, 2012

@stof I squash my commits. It's ok ?

Christophe Coevoet
Collaborator
stof commented April 13, 2012

It looks good to me. @fabpot @bschussek ready for the final review

@ruian could you send PRs to https://github.com/doctrine/DoctrineMongoDBBundle https://github.com/doctrine/DoctrinePHPCRBundle and https://github.com/doctrine/DoctrineCouchDBBundle to add the new method ?

Julien 'ruian' Galenski
ruian commented April 13, 2012

yep sure

src/Symfony/Component/Form/FormFactory.php
((5 lines not shown))
333 334
 
334 335
         $type = $typeGuess ? $typeGuess->getType() : 'text';
335 336
 
336 337
         $maxLength = $maxLengthGuess ? $maxLengthGuess->getValue() : null;
337  
-        $minLength = $minLengthGuess ? $minLengthGuess->getValue() : null;
4
Victor Berchet
vicb added a note April 13, 2012

this is wrong... as getValue() can return null. Could you revert and add a comment here (which I should have done in first place).

Julien 'ruian' Galenski
ruian added a note April 13, 2012

Yep sure i revert it as you wish

Christophe Coevoet Collaborator
stof added a note April 13, 2012

it is needed as you code is broken in case of a null value

Julien 'ruian' Galenski
ruian added a note April 13, 2012

It's fixed now, i will squash and make some PR into others Repo who depends of this

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Julien 'ruian' Galenski
ruian commented April 13, 2012

@stof I made all Doctrine PRs to respect this new one

Julien 'ruian' Galenski
ruian commented April 16, 2012

@bschussek any comments on this PR ?

src/Symfony/Component/Form/Extension/Validator/ValidatorTypeGuesser.php
... ...
@@ -233,6 +246,21 @@ public function guessMinLengthForConstraint(Constraint $constraint)
233 246
     }
234 247
 
235 248
     /**
  249
+     * Guesses a field's pattern based on the given constraint
  250
+     *
  251
+     * @param  Constraint $constraint  The constraint to guess for
  252
+     *
  253
+     * @return Guess       The guess for the pattern
  254
+     */
  255
+    public function guessPatternForConstraint(Constraint $constraint)
  256
+    {
  257
+        switch (get_class($constraint)) {
  258
+            case 'Symfony\Component\Validator\Constraints\Regex':
  259
+                return new PatternGuess($constraint->pattern, Guess::LOW_CONFIDENCE);
2
Bernhard Schussek Collaborator
webmozart added a note April 17, 2012

You should use ValueGuess instead.

Bernhard Schussek Collaborator
webmozart added a note April 17, 2012

You should put MEDIUM_CONFIDENCE here. A second case statement should be added for the MinLength constraint. If you check FormFactory, a "pattern" constraint is created there for min length - these two functionalities must now be merged.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
src/Symfony/Component/Form/FormFactory.php
... ...
@@ -330,12 +330,14 @@ public function createBuilderForProperty($class, $property, $data = null, array
330 330
         $maxLengthGuess = $this->guesser->guessMaxLength($class, $property);
331 331
         $minLengthGuess = $this->guesser->guessMinLength($class, $property);
1
Bernhard Schussek Collaborator
webmozart added a note April 17, 2012

guessMinLength() should be removed entirely and merged into guessPattern()

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Bernhard Schussek
Collaborator

Hi @ruian, thank you for the PR! I added some comments and hope you can check them soon. If you need help, just drop a message.

Julien 'ruian' Galenski
ruian commented April 17, 2012

@bschussek thx for your comments, i will do this as soon as possible

Jeremy Mikola jmikola referenced this pull request in doctrine/DoctrineMongoDBBundle April 17, 2012
Merged

add guess pattern #93

Julien 'ruian' Galenski
ruian commented April 18, 2012

@bschussek should i remove all call to guessMinLength ?

src/Symfony/Component/Form/Extension/Validator/ValidatorTypeGuesser.php
... ...
@@ -233,6 +245,21 @@ public function guessMinLengthForConstraint(Constraint $constraint)
233 245
     }
234 246
 
235 247
     /**
  248
+     * Guesses a field's pattern based on the given constraint
  249
+     *
  250
+     * @param  Constraint $constraint  The constraint to guess for
  251
+     *
  252
+     * @return Guess       The guess for the pattern
  253
+     */
  254
+    public function guessPatternForConstraint(Constraint $constraint)
  255
+    {
  256
+        switch (get_class($constraint)) {
  257
+            case 'Symfony\Component\Validator\Constraints\Regex':
  258
+                return new ValueGuess($constraint->pattern, Guess::MEDIUM_CONFIDENCE );
1
Bernhard Schussek Collaborator
webmozart added a note April 20, 2012

The pattern for the MinLength constraint should be added here as well (with LOW_CONFIDENCE).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Bernhard Schussek
Collaborator

@ruian Yes, guessMinLength() can be removed entirely (and all references to it).

Julien 'ruian' Galenski
ruian commented April 20, 2012

ping @bschussek is it good like this ?

src/Symfony/Component/Form/Extension/Validator/ValidatorTypeGuesser.php
((6 lines not shown))
72 72
     {
73 73
         $guesser = $this;
74 74
 
75 75
         return $this->guess($class, $property, function (Constraint $constraint) use ($guesser) {
76  
-            return $guesser->guessMinLengthForConstraint($constraint);
  76
+            return $guesser->guessPatternConstraint($constraint);
1
Bernhard Schussek Collaborator
webmozart added a note April 20, 2012

Please keep the "For" in the method name.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
src/Symfony/Component/Form/Extension/Validator/ValidatorTypeGuesser.php
((19 lines not shown))
219 219
 
220 220
             case 'Symfony\Component\Validator\Constraints\SizeLength':
221  
-                return new ValueGuess($constraint->min, Guess::HIGH_CONFIDENCE);
  221
+                return new ValueGuess(sprintf('.{%s,}', $constraint->min), Guess::LOW_CONFIDENCE);
  222
+
  223
+            case 'Symfony\Component\Validator\Constraints\Min':
2
Bernhard Schussek Collaborator
webmozart added a note April 20, 2012

This is not correct. Min enforces a value to have a minimal numeric value, for example Min(100), but has no relation to lengths.

Bernhard Schussek Collaborator
webmozart added a note April 20, 2012

Ah, my bad. You should keep it as before, i.e. put

strlen((string) $constraint->min)

instead of

$constraint->min
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
src/Symfony/Component/Form/Extension/Validator/ValidatorTypeGuesser.php
((26 lines not shown))
222 225
 
  226
+            case 'Symfony\Component\Validator\Constraints\Size':
1
Bernhard Schussek Collaborator
webmozart added a note April 20, 2012

This should be changed like Min.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
src/Symfony/Component/Form/Extension/Validator/ValidatorTypeGuesser.php
((26 lines not shown))
222 225
 
  226
+            case 'Symfony\Component\Validator\Constraints\Size':
  227
+                return new ValueGuess(sprintf('.{%s,}', $constraint->min), Guess::LOW_CONFIDENCE);
  228
+
  229
+            case 'Symfony\Component\Validator\Constraints\Regex':
  230
+                return new ValueGuess($constraint->pattern, Guess::MEDIUM_CONFIDENCE );
  231
+            
223 232
             case 'Symfony\Component\Validator\Constraints\Type':
1
Bernhard Schussek Collaborator
webmozart added a note April 20, 2012

This should be removed. Guessing "null" does not help.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
src/Symfony/Bridge/Doctrine/Form/DoctrineOrmTypeGuesser.php
((6 lines not shown))
119 119
     {
120 120
         $ret = $this->getMetadata($class);
121 121
         if ($ret && $ret[0]->hasField($property) && !$ret[0]->hasAssociation($property)) {
122 122
             $mapping = $ret[0]->getFieldMapping($property);
123 123
 
124 124
             if (in_array($ret[0]->getTypeOfField($property), array('decimal', 'float'))) {
125  
-                return new ValueGuess(null, Guess::MEDIUM_CONFIDENCE);
  125
+                return new ValueGuess(null, Guess::LOW_CONFIDENCE);
3
Bernhard Schussek Collaborator
webmozart added a note April 20, 2012

What's the point of this line?

Julien 'ruian' Galenski
ruian added a note April 20, 2012

It's because of merging min into pattern. But if it's useless i remove it

Bernhard Schussek Collaborator
webmozart added a note April 20, 2012

Returning a guess with the value "null" is (almost always) useless, because that's the same as having no guess at all. So you can remove this one.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
src/Symfony/Component/Form/Extension/Validator/ValidatorTypeGuesser.php
((33 lines not shown))
223 232
             case 'Symfony\Component\Validator\Constraints\Type':
224 233
                 if (in_array($constraint->type, array('double', 'float', 'numeric', 'real'))) {
225  
-                    return new ValueGuess(null, Guess::MEDIUM_CONFIDENCE);
  234
+                    return new ValueGuess(null, Guess::LOW_CONFIDENCE);
12
Bernhard Schussek Collaborator
webmozart added a note April 20, 2012

What's the point in returning null here?

Julien 'ruian' Galenski
ruian added a note April 20, 2012

Same as doctrineOrmTypeGuesser comment

Victor Berchet
vicb added a note April 20, 2012

Because you can not guess the max length of a float... may be it should not return anything after all

Julien 'ruian' Galenski
ruian added a note April 20, 2012

Ok, i understand, but why it was in guessMin if a null was return ?

Victor Berchet
vicb added a note April 20, 2012

Ok the rationale:

  • When you have a min value, you guess a min length of this min (LOW_CONFIDENCE) , lines below
  • If this value is a float type, this is wrong so you guess null with MEDIUM_CONFIDENCE to override the previous guess.

Example:
You want a float greater than 5, 4.512313 is not valid but length(4.512314) > length(5)

Bernhard Schussek Collaborator
webmozart added a note April 20, 2012

I don't know. If a guesser can't guess, it shouldn't guess. So you can remove this one too.

Victor Berchet
vicb added a note April 20, 2012

@bschussek did you get my comment before posting ?

Victor Berchet
vicb added a note April 20, 2012

ref: #3645

Bernhard Schussek Collaborator
webmozart added a note April 20, 2012

I did not :) This makes sense. Please add a comment then that has at least the length of your explanatory comment above ;)

Bernhard Schussek Collaborator
webmozart added a note April 20, 2012

Please do also add the link to the ticket as comment.

Victor Berchet
vicb added a note April 20, 2012

I'll open an issue for adding a comment. This has to be done for:

  • the validator,
  • the ORM,
  • the ODM,
  • Propel
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Julien 'ruian' Galenski
ruian commented April 21, 2012

@bschussek @vicb i think it's good now, and i think i understood the diff between Size and SizeLength Constraint ValueGuess (One is for numeric and the other for string). It was not clear in my mind when i made the change. But now it's okay

src/Symfony/Bridge/Doctrine/Form/DoctrineOrmTypeGuesser.php
... ...
@@ -113,9 +113,20 @@ public function guessMaxLength($class, $property)
113 113
     }
114 114
 
115 115
     /**
116  
-     * {@inheritDoc}
  116
+     * Guesses a field's pattern based on the given constraint
  117
+     *
  118
+     * - When you have a min value, you guess a min length of this min (LOW_CONFIDENCE) , lines below
  119
+     * - If this value is a float type, this is wrong so you guess null with MEDIUM_CONFIDENCE to override the previous guess.
  120
+     * Example:
  121
+     *  You want a float greater than 5, 4.512313 is not valid but length(4.512314) > length(5)
  122
+     * PR https://github.com/symfony/symfony/pull/3927
  123
+     * 
  124
+     * @param  string $class      The fully qualified class name
  125
+     * @param  string $property   The name of the property to guess for
  126
+     *
  127
+     * @return Guess The guess for the pattern
1
Bernhard Schussek Collaborator
webmozart added a note April 22, 2012

Please add the comment to FormTypeGuesserInterface and use {@inheritdoc} in all implementing classes.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Bernhard Schussek
Collaborator

Please squash the commits once you're done. You should also update the CHANGELOG.

Drak
Collaborator
drak commented April 22, 2012

This needs to be rebased with also as it currently wont merge. (git fetch; git rebase origin/master).

Julien 'ruian' Galenski ruian merged commit b0a6956 into from April 23, 2012
Julien 'ruian' Galenski ruian closed this April 23, 2012
Lukas Kahwe Smith

something is strange with this PR .. why is it marked as merged by @ruian? and why are there no changes in the diff? and why was it labeled as no BC break?

Julien 'ruian' Galenski
ruian commented April 23, 2012

@lsmith77 I don't know, what append, i merge the master into my branch...
So a recreate a PR #4077 but it seems alright now.

Bernhard Schussek
Collaborator

@lsmith77 You are right, this should be marked as BC break. I originally thought that guessMinLength() was only introduced after 2.0, but it was not. I will update the documentation.

Julien 'ruian' Galenski
ruian commented April 23, 2012

@bschussek do you want i create a new PR for the changelog ?

Bernhard Schussek
Collaborator

@ruian I already did this. Thanks anyway!

Fabien Potencier fabpot referenced this pull request from a commit April 23, 2012
Fabien Potencier merged branch bschussek/issue4077 (PR #4085)
Commits
-------

d9e142b [Form] Restored and deprecated method `guessMinLength` in FormTypeGuesser

Discussion
----------

[Form] Restored and deprecated method `guessMinLength` in FormTypeGuesser

Bug fix: yes
Feature addition: no
Backwards compatibility break: no
Symfony2 tests pass: yes
Fixes the following tickets: -
Todo: -

![Travis Build Status](https://secure.travis-ci.org/bschussek/symfony.png?branch=issue4077)

This is a follow-up PR to #4077 (see comments in #3927 for reference).
c2a426e
mmucklo mmucklo referenced this pull request from a commit April 23, 2012
Fabien Potencier merged branch bschussek/issue4077 (PR #4085)
Commits
-------

d9e142b [Form] Restored and deprecated method `guessMinLength` in FormTypeGuesser

Discussion
----------

[Form] Restored and deprecated method `guessMinLength` in FormTypeGuesser

Bug fix: yes
Feature addition: no
Backwards compatibility break: no
Symfony2 tests pass: yes
Fixes the following tickets: -
Todo: -

![Travis Build Status](https://secure.travis-ci.org/bschussek/symfony.png?branch=issue4077)

This is a follow-up PR to #4077 (see comments in #3927 for reference).
2511b2f
Craig Marvelley craigmarvelley referenced this pull request from a commit in craigmarvelley/symfony April 23, 2012
Fabien Potencier merged branch ruian/guess_pattern (PR #4077)
Commits
-------

f7200e4 [Form] added method `guessPattern` to FormTypeGuesserInterface

Discussion
----------

[Form] add guess pattern

Bug fix: no
Feature addition: yes
Backwards compatibility break: no
Symfony2 tests pass: yes
Fixes the following tickets: symfony#3766
Todo: -

Due to some trouble when rebase my previous PR i open a new one with Master merged
Refs PR: symfony#3927

---------------------------------------------------------------------------

by fabpot at 2012-04-23T10:25:57Z

@vicb @bschussek ok for you?

---------------------------------------------------------------------------

by bschussek at 2012-04-23T10:26:51Z

please do also rephrase the commit message to something clearer, like

    [Form] added method `guessPattern` to FormTypeGuesserInterface

---------------------------------------------------------------------------

by bschussek at 2012-04-23T10:27:35Z

Otherwise this looks good :)

---------------------------------------------------------------------------

by ruian at 2012-04-23T10:29:18Z

every changes done
27b4774
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Sorry, commit information is not available for this pull request.

This page is out of date. Refresh to see the latest.

Showing 0 changed files with 0 additions and 0 deletions. Show diff stats Hide diff stats

Commit_comment_tip

Tip: You can add notes to lines in a file. Hover to the left of a line to make a note

Something went wrong with that request. Please try again.