p4ruby 2015.2.1313860 → 2017.1.1599185
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +45 -39
- data/ext/P4/extconf.rb +1 -1
- data/ext/P4/p4.cpp +37 -9
- data/ext/P4/p4clientapi.cpp +11 -0
- data/ext/P4/p4clientapi.h +14 -6
- data/lib/P4/version.rb +2 -2
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 6c726609fc009f798f611b395f1b73782d33a951
         | 
| 4 | 
            +
              data.tar.gz: f40e6deeb256912813dea61449903fe33223aa69
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 30e137fbe3274e5e80454adbb1c0aa8b6d6515e866b63129750da07048e47110d96f34510766e466ba571b1c26577d75e66135e5e08ad4784ddbaf98815859a7
         | 
| 7 | 
            +
              data.tar.gz: f2009d6583e53a4702bc4409be915cb73cb39830c432c174c4a0f623b37d870b4439e2d8789620cd2485fe3edfcf907c34ae0569f00cc67bd2af2937552d363b
         | 
    
        data/README.md
    CHANGED
    
    | @@ -1,15 +1,15 @@ | |
| 1 1 | 
             
            # Release Notes for P4Ruby, Perforce's script API for Ruby
         | 
| 2 2 |  | 
| 3 | 
            -
            Version  | 
| 3 | 
            +
            Version 2017.1
         | 
| 4 4 |  | 
| 5 5 | 
             
            ## Introduction
         | 
| 6 6 |  | 
| 7 | 
            -
            P4Ruby is a native Ruby gem that allows you to run Perforce commands from | 
| 7 | 
            +
            P4Ruby is a native Ruby gem that allows you to run Perforce commands from
         | 
| 8 8 | 
             
            Ruby applications, and retrieve the results in a Ruby-friendly format.
         | 
| 9 9 |  | 
| 10 10 | 
             
            P4Ruby is intended to work against a corresponding version of the Perforce
         | 
| 11 | 
            -
            C++ API, e.g., P4Ruby  | 
| 12 | 
            -
            of the P4API. You can always install P4Ruby specifying a specific version of | 
| 11 | 
            +
            C++ API, e.g., P4Ruby 2017.1 will be compiled using a 2017.1 version
         | 
| 12 | 
            +
            of the P4API. You can always install P4Ruby specifying a specific version of
         | 
| 13 13 | 
             
            the P4API.
         | 
| 14 14 |  | 
| 15 15 | 
             
            To determine the version of your P4Ruby, and which version of the
         | 
| @@ -21,13 +21,13 @@ P4API it has been built with, issue the following command: | |
| 21 21 |  | 
| 22 22 | 
             
            ### Installing P4Ruby
         | 
| 23 23 |  | 
| 24 | 
            -
            As of 2014.2, the recommended mechanism for installing P4Ruby is via | 
| 24 | 
            +
            As of 2014.2, the recommended mechanism for installing P4Ruby is via
         | 
| 25 25 | 
             
            rubygems.org.
         | 
| 26 26 |  | 
| 27 27 | 
             
            Before installing, please take care that any older version of P4Ruby that
         | 
| 28 28 | 
             
            may have been installed outside of the Gem process is removed from your
         | 
| 29 29 | 
             
            gempath. The older installation process can not be easily removed and may
         | 
| 30 | 
            -
            conflict with a gem-based install. Make sure that both P4.rb and P4.so (or | 
| 30 | 
            +
            conflict with a gem-based install. Make sure that both P4.rb and P4.so (or
         | 
| 31 31 | 
             
            P4.bundle on OS X) are not available within the load path of Ruby. You can
         | 
| 32 32 | 
             
            use the `puts $:` command in `irb` to determine your current load path.
         | 
| 33 33 |  | 
| @@ -36,8 +36,8 @@ your installation of Ruby. If you can build the core Ruby distribution | |
| 36 36 | 
             
            locally, you likely can install P4Ruby without incident. On Windows,
         | 
| 37 37 | 
             
            precompiled gems are available, which already include the P4API and OpenSSL.
         | 
| 38 38 |  | 
| 39 | 
            -
            The main command to install p4ruby is via gem or bundler. (When using the | 
| 40 | 
            -
            default system rubies from OS X or the CentOS Software Collections Library, | 
| 39 | 
            +
            The main command to install p4ruby is via gem or bundler. (When using the
         | 
| 40 | 
            +
            default system rubies from OS X or the CentOS Software Collections Library,
         | 
| 41 41 | 
             
            see 'Problems Specifying P4API' below.)
         | 
| 42 42 |  | 
| 43 43 | 
             
                gem install p4ruby
         | 
| @@ -58,15 +58,15 @@ API itself from ftp.perforce.com. | |
| 58 58 | 
             
            Alternatively, you can use Bundler (http://bundler.io). In your Gemfile,
         | 
| 59 59 | 
             
            specify
         | 
| 60 60 |  | 
| 61 | 
            -
                gem 'p4ruby', '~>  | 
| 61 | 
            +
                gem 'p4ruby', '~> 2017.1'
         | 
| 62 62 |  | 
| 63 63 | 
             
            And then execute:
         | 
| 64 64 |  | 
| 65 65 | 
             
                bundle --with-p4api-dir=DIR
         | 
| 66 66 |  | 
| 67 67 | 
             
            #### Problems Specifying P4API
         | 
| 68 | 
            -
             | 
| 69 | 
            -
            On older Ruby platforms, such as the default OS X or ruby193 CentOS | 
| 68 | 
            +
             | 
| 69 | 
            +
            On older Ruby platforms, such as the default OS X or ruby193 CentOS
         | 
| 70 70 | 
             
            distributions, issues can arise when specifying the P4API directly via
         | 
| 71 71 | 
             
            the command line.
         | 
| 72 72 |  | 
| @@ -77,7 +77,7 @@ directly: | |
| 77 77 | 
             
                   --with-p4-api-include=DIR/include \
         | 
| 78 78 | 
             
                   --with-p4-api-lib=DIR/lib
         | 
| 79 79 |  | 
| 80 | 
            -
            An alternative is to specify the P4API directory using the `p4api_dir` | 
| 80 | 
            +
            An alternative is to specify the P4API directory using the `p4api_dir`
         | 
| 81 81 | 
             
            environment variable.
         | 
| 82 82 |  | 
| 83 83 |  | 
| @@ -89,16 +89,16 @@ environment variable. | |
| 89 89 | 
             
               "ftp://ftp.perforce.com/perforce". The API archive is located
         | 
| 90 90 | 
             
               in release and platform-specific subdirectories and is named
         | 
| 91 91 | 
             
               "p4api.tgz".
         | 
| 92 | 
            -
             | 
| 92 | 
            +
             | 
| 93 93 | 
             
               __IMPORTANT__: Mac OS X users MUST use the 'darwin' variant
         | 
| 94 94 | 
             
               of the Perforce API. Using the 'macos' variant
         | 
| 95 95 | 
             
               does not work.
         | 
| 96 | 
            -
             | 
| 96 | 
            +
             | 
| 97 97 | 
             
               Note: 32-bit builds of P4Ruby require a 32-bit version of the
         | 
| 98 98 | 
             
               C++ API and a 32-bit version of Ruby. 64-bit builds of
         | 
| 99 99 | 
             
               P4Ruby require a 64-bit version of the C++ API and a
         | 
| 100 100 | 
             
               64-bit version of Ruby.
         | 
| 101 | 
            -
             | 
| 101 | 
            +
             | 
| 102 102 | 
             
               Unzip the archive into an empty directory.
         | 
| 103 103 |  | 
| 104 104 | 
             
            2. Extract the P4Ruby API archive into a new, empty directory.
         | 
| @@ -106,16 +106,16 @@ environment variable. | |
| 106 106 | 
             
            3. In the p4ruby source directory, install dependencies:
         | 
| 107 107 |  | 
| 108 108 | 
             
                    bundle install
         | 
| 109 | 
            -
             | 
| 109 | 
            +
             | 
| 110 110 | 
             
            3. In the p4ruby source directory, build the gem:
         | 
| 111 111 |  | 
| 112 | 
            -
                    p4api_dir=<absolute path to Perforce C++ API> rake compile | 
| 112 | 
            +
                    p4api_dir=<absolute path to Perforce C++ API> rake compile
         | 
| 113 113 |  | 
| 114 114 | 
             
            4. Test your distribution, which relies on a locally installed p4d.
         | 
| 115 115 |  | 
| 116 116 | 
             
                    rake test
         | 
| 117 | 
            -
             | 
| 118 | 
            -
                If `p4d` is not available on your path, indicate it via the `P4D_BIN` | 
| 117 | 
            +
             | 
| 118 | 
            +
                If `p4d` is not available on your path, indicate it via the `P4D_BIN`
         | 
| 119 119 | 
             
                environment variable before running `rake test`.
         | 
| 120 120 |  | 
| 121 121 | 
             
            5. Install P4Ruby into your local gem cache:
         | 
| @@ -147,30 +147,29 @@ Perforce server later than 2001.1 | |
| 147 147 | 
             
            You should use a version of P4Ruby built against a corresponding version
         | 
| 148 148 | 
             
            of the P4API that matches your Perforce server version. Since 2014.2,
         | 
| 149 149 | 
             
            you should try to use the same major and minor variation of P4Ruby as
         | 
| 150 | 
            -
            used by the Perforce server. Ergo, against Perforce server version  | 
| 151 | 
            -
            you would want a P4Ruby version that starts with  | 
| 150 | 
            +
            used by the Perforce server. Ergo, against Perforce server version 2017.1,
         | 
| 151 | 
            +
            you would want a P4Ruby version that starts with 2017.1.
         | 
| 152 152 |  | 
| 153 153 | 
             
            #### API Compatibility
         | 
| 154 154 |  | 
| 155 | 
            -
            The  | 
| 155 | 
            +
            The 2017.1 release of P4Ruby supports the 2017.1 Perforce API.
         | 
| 156 156 | 
             
            Older releases might work but are not supported.
         | 
| 157 157 |  | 
| 158 158 | 
             
            #### Ruby Compatibility
         | 
| 159 159 |  | 
| 160 | 
            -
            The  | 
| 161 | 
            -
            with Ruby MRI releases 2.0, 2.1, and 2. | 
| 160 | 
            +
            The 2017.1 release of P4Ruby is supported by installing the gem
         | 
| 161 | 
            +
            with Ruby MRI releases 2.0, 2.1, 2.2, and 2.3, with shared library
         | 
| 162 162 | 
             
            support.
         | 
| 163 163 |  | 
| 164 164 | 
             
            For detailed compatibility, please check the following table:
         | 
| 165 165 |  | 
| 166 166 | 
             
                Ruby Release | P4Ruby Release
         | 
| 167 167 | 
             
                ===================================
         | 
| 168 | 
            -
                      | 
| 169 | 
            -
                     1.8     | 2007.3 or later (unsupported)
         | 
| 170 | 
            -
                     1.9     | 2011.1 or later
         | 
| 168 | 
            +
                     <2.0    | 2011.1 or later (unsupported)
         | 
| 171 169 | 
             
                     2.0     | 2014.1 or later
         | 
| 172 170 | 
             
                     2.1     | 2014.2 or later
         | 
| 173 171 | 
             
                     2.2     | 2014.2 or later
         | 
| 172 | 
            +
                     2.3     | 2017.1 or later
         | 
| 174 173 |  | 
| 175 174 | 
             
            It is recommended that you use a Ruby distribution that can deploy
         | 
| 176 175 | 
             
            native gems easily, which, outside of Windows means obtaining a source
         | 
| @@ -183,12 +182,12 @@ have shared library support configured, which is needed for Ruby | |
| 183 182 | 
             
            extensions.
         | 
| 184 183 |  | 
| 185 184 | 
             
            In general, Ruby VMs installed via package managers are not officially
         | 
| 186 | 
            -
            coordinated with the MRI releases available on ruby-lang.org. | 
| 187 | 
            -
             | 
| 185 | 
            +
            coordinated with the MRI releases available on ruby-lang.org.
         | 
| 186 | 
            +
             | 
| 188 187 | 
             
            We do verify that p4ruby works with Ruby 1.9 on Debian (and Ubuntu), and
         | 
| 189 | 
            -
            on CentOS 6 using the Software Collections Library. These are considered | 
| 188 | 
            +
            on CentOS 6 using the Software Collections Library. These are considered
         | 
| 190 189 | 
             
            "stable" distributions, and do receive security updates.
         | 
| 191 | 
            -
             | 
| 190 | 
            +
             | 
| 192 191 | 
             
            Other versions of Ruby, such as the default distribution of OS X may not
         | 
| 193 192 | 
             
            work. The default OS X Ruby is infrequently updated by Apple, and is known
         | 
| 194 193 | 
             
            to contain issues that do not seem to be patched.
         | 
| @@ -202,7 +201,7 @@ fail with the error: | |
| 202 201 |  | 
| 203 202 | 
             
                "SSL library must be at least version 1.0.1."
         | 
| 204 203 |  | 
| 205 | 
            -
            The  | 
| 204 | 
            +
            The 2017.1 release of P4Ruby is supported with OpenSSL 1.0.2
         | 
| 206 205 |  | 
| 207 206 | 
             
            For detailed compatibility, please check the following table:
         | 
| 208 207 |  | 
| @@ -214,6 +213,7 @@ For detailed compatibility, please check the following table: | |
| 214 213 | 
             
                     2014.2                | 	1.0.1i+
         | 
| 215 214 | 
             
                     2015.1                | 	1.0.1i+
         | 
| 216 215 | 
             
                     2015.2                | 	1.0.1i+
         | 
| 216 | 
            +
                     2017.1                |  1.0.2l+
         | 
| 217 217 |  | 
| 218 218 |  | 
| 219 219 | 
             
            #### Platform Compatibility
         | 
| @@ -237,7 +237,7 @@ handling between compilers. | |
| 237 237 |  | 
| 238 238 | 
             
            #### Compatibility with Previous Releases
         | 
| 239 239 |  | 
| 240 | 
            -
            Unless otherwise stated below, the  | 
| 240 | 
            +
            Unless otherwise stated below, the 2017.1 release of P4Ruby is
         | 
| 241 241 | 
             
            compatible with previous releases from Perforce Software.
         | 
| 242 242 |  | 
| 243 243 | 
             
            #### Known Limitations
         | 
| @@ -288,6 +288,12 @@ release up to the bug fix change level. | |
| 288 288 |  | 
| 289 289 | 
             
            --------------------------------------------------------------------------
         | 
| 290 290 |  | 
| 291 | 
            +
            New functionality in 2017.1
         | 
| 292 | 
            +
             | 
| 293 | 
            +
            - (SIR#92235 / P4RUBY-204)
         | 
| 294 | 
            +
             | 
| 295 | 
            +
                Support graph depot commands
         | 
| 296 | 
            +
             | 
| 291 297 | 
             
            New functionality in 2015.2
         | 
| 292 298 |  | 
| 293 299 | 
             
            - (SIR#78548 / P4RUBY-193)
         | 
| @@ -302,7 +308,7 @@ Changes in both 2015.2.0.pre0 and 2015.1.0 | |
| 302 308 | 
             
            - Applied change to P4ClientApi::SetCharset, that if it is set to "none", then
         | 
| 303 309 | 
             
              we will ignore the setting. The P4API enviro file handling seems to always
         | 
| 304 310 | 
             
              create this setting and apply it in various circumstances.
         | 
| 305 | 
            -
             | 
| 311 | 
            +
             | 
| 306 312 | 
             
            Changes in 2015.1.0
         | 
| 307 313 |  | 
| 308 314 | 
             
            - Updated spec mappings in specmgr.cpp to be up to date with the 2015.1 P4API
         | 
| @@ -375,7 +381,7 @@ Bugs fixed in 2014.2.0.pre2 | |
| 375 381 |  | 
| 376 382 | 
             
            New functionality in 2014.1
         | 
| 377 383 |  | 
| 378 | 
            -
            - 807216 (SIR#70070) | 
| 384 | 
            +
            - 807216 (SIR#70070)
         | 
| 379 385 |  | 
| 380 386 | 
             
                P4Ruby now supports the P4IGNORE file feature introduced
         | 
| 381 387 | 
             
                in the 2013.2 server. Three new methods have been added
         | 
| @@ -398,7 +404,7 @@ Bugs fixed in 2013.1 | |
| 398 404 |  | 
| 399 405 | 
             
                P4Ruby no longer crashes when an exception is raised from
         | 
| 400 406 | 
             
                the block passed to P4#run_resolve.
         | 
| 401 | 
            -
             | 
| 407 | 
            +
             | 
| 402 408 | 
             
            --------------------------------------------------------------------------
         | 
| 403 409 |  | 
| 404 410 | 
             
            New functionality in 2012.2
         | 
| @@ -544,11 +550,11 @@ New functionality in 2011.1 | |
| 544 550 |  | 
| 545 551 | 
             
                P4Ruby supports setting values in the registry (on those
         | 
| 546 552 | 
             
                platforms that support it).
         | 
| 547 | 
            -
             | 
| 553 | 
            +
             | 
| 548 554 | 
             
                The command P4#set_env( var, val ) will set a registry
         | 
| 549 555 | 
             
                variable on platforms that support this action or raise
         | 
| 550 556 | 
             
                a P4Exception for those that don't.
         | 
| 551 | 
            -
             | 
| 557 | 
            +
             | 
| 552 558 | 
             
                The command P4#set_env( var, "" ) unsets a registry variable.
         | 
| 553 559 |  | 
| 554 560 | 
             
            - 333292 (Bug #36121)
         | 
| @@ -717,7 +723,7 @@ New functionality in 2010.1 | |
| 717 723 |  | 
| 718 724 | 
             
                 It's now unnecessary to run a command before calling the
         | 
| 719 725 | 
             
                 following methods:
         | 
| 720 | 
            -
             | 
| 726 | 
            +
             | 
| 721 727 | 
             
                       P4#server_level
         | 
| 722 728 | 
             
                       P4#server_case_sensitive?
         | 
| 723 729 | 
             
                       P4#server_unicode?
         | 
    
        data/ext/P4/extconf.rb
    CHANGED
    
    | @@ -9,7 +9,7 @@ require 'rbconfig' | |
| 9 9 |  | 
| 10 10 | 
             
            # Set this to the main version directory we look up in ftp.perforce.com for the P4API
         | 
| 11 11 | 
             
            # This is ignored if you specify the version on the command line.
         | 
| 12 | 
            -
            P4API_VERSION_DIR = ' | 
| 12 | 
            +
            P4API_VERSION_DIR = 'r17.2'
         | 
| 13 13 |  | 
| 14 14 | 
             
            #==============================================================================
         | 
| 15 15 | 
             
            # Provide platform variables in P4-specific format
         | 
    
        data/ext/P4/p4.cpp
    CHANGED
    
    | @@ -30,7 +30,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
| 30 30 | 
             
             *
         | 
| 31 31 | 
             
             * Author	: Tony Smith <tony@perforce.com> or <tony@smee.org>
         | 
| 32 32 | 
             
             *
         | 
| 33 | 
            -
             * Description	: Ruby bindings for the Perforce API. | 
| 33 | 
            +
             * Description	: Ruby bindings for the Perforce API.
         | 
| 34 34 | 
             
             *
         | 
| 35 35 | 
             
             * vim:ts=8:sw=4
         | 
| 36 36 | 
             
             ******************************************************************************/
         | 
| @@ -160,7 +160,7 @@ static VALUE p4_run_tagged( VALUE self, VALUE tagged ) | |
| 160 160 | 
             
            	flag = 0;
         | 
| 161 161 | 
             
                else
         | 
| 162 162 | 
             
            	flag = NUM2INT( tagged ) ? 1 : 0;
         | 
| 163 | 
            -
             | 
| 163 | 
            +
             | 
| 164 164 | 
             
                int old_value = p4->IsTagged();
         | 
| 165 165 | 
             
                p4->Tagged( flag );
         | 
| 166 166 |  | 
| @@ -196,7 +196,7 @@ static VALUE p4_set_tagged( VALUE self, VALUE toggle ) | |
| 196 196 | 
             
            	flag = 0;
         | 
| 197 197 | 
             
                else
         | 
| 198 198 | 
             
            	flag = NUM2INT( toggle ) ? 1 : 0;
         | 
| 199 | 
            -
             | 
| 199 | 
            +
             | 
| 200 200 | 
             
                p4->Tagged( flag );
         | 
| 201 201 | 
             
                return flag ? Qtrue : Qfalse;	// Seems to be ignored...
         | 
| 202 202 | 
             
            }
         | 
| @@ -541,7 +541,7 @@ static VALUE p4_set_track( VALUE self, VALUE toggle ) | |
| 541 541 | 
             
            	flag = 0;
         | 
| 542 542 | 
             
                else
         | 
| 543 543 | 
             
            	flag = NUM2INT( toggle ) ? 1 : 0;
         | 
| 544 | 
            -
             | 
| 544 | 
            +
             | 
| 545 545 | 
             
                p4->SetTrack( flag );
         | 
| 546 546 | 
             
                return flag ? Qtrue : Qfalse;	// Seems to be ignored...
         | 
| 547 547 | 
             
            }
         | 
| @@ -567,11 +567,37 @@ static VALUE p4_set_streams( VALUE self, VALUE toggle ) | |
| 567 567 | 
             
            	flag = 0;
         | 
| 568 568 | 
             
                else
         | 
| 569 569 | 
             
            	flag = NUM2INT( toggle ) ? 1 : 0;
         | 
| 570 | 
            -
             | 
| 570 | 
            +
             | 
| 571 571 | 
             
                p4->SetStreams( flag );
         | 
| 572 572 | 
             
                return flag ? Qtrue : Qfalse;	// Seems to be ignored...
         | 
| 573 573 | 
             
            }
         | 
| 574 574 |  | 
| 575 | 
            +
            static VALUE p4_get_graph( VALUE self )
         | 
| 576 | 
            +
            {
         | 
| 577 | 
            +
                P4ClientApi *p4;
         | 
| 578 | 
            +
                Data_Get_Struct( self, P4ClientApi, p4 );
         | 
| 579 | 
            +
                return p4->IsGraph() ? Qtrue : Qfalse;
         | 
| 580 | 
            +
            }
         | 
| 581 | 
            +
             | 
| 582 | 
            +
            static VALUE p4_set_graph( VALUE self, VALUE toggle )
         | 
| 583 | 
            +
            {
         | 
| 584 | 
            +
                P4ClientApi *p4;
         | 
| 585 | 
            +
                Data_Get_Struct( self, P4ClientApi, p4 );
         | 
| 586 | 
            +
             | 
| 587 | 
            +
                // The user might have passed an integer, or it might be a boolean,
         | 
| 588 | 
            +
                // we convert to int for consistency.
         | 
| 589 | 
            +
                int     flag = 0;
         | 
| 590 | 
            +
                if( toggle == Qtrue )
         | 
| 591 | 
            +
                flag = 1;
         | 
| 592 | 
            +
                else if( toggle == Qfalse )
         | 
| 593 | 
            +
                flag = 0;
         | 
| 594 | 
            +
                else
         | 
| 595 | 
            +
                flag = NUM2INT( toggle ) ? 1 : 0;
         | 
| 596 | 
            +
             | 
| 597 | 
            +
                p4->SetGraph( flag );
         | 
| 598 | 
            +
                return flag ? Qtrue : Qfalse;   // Seems to be ignored...
         | 
| 599 | 
            +
            }
         | 
| 600 | 
            +
             | 
| 575 601 | 
             
            /*******************************************************************************
         | 
| 576 602 | 
             
             * Running commands.  General purpose Run method and method for supplying
         | 
| 577 603 | 
             
             * input to "p4 xxx -i" commands
         | 
| @@ -599,7 +625,7 @@ static VALUE p4_run( VALUE self, VALUE args ) | |
| 599 625 | 
             
                char *cmd = StringValuePtr( v );
         | 
| 600 626 | 
             
                argc = NUM2INT( rb_funcall( flatArgs, idLength, 0 ) );
         | 
| 601 627 |  | 
| 602 | 
            -
                // Allocate storage on the stack so it's automatically reclaimed | 
| 628 | 
            +
                // Allocate storage on the stack so it's automatically reclaimed
         | 
| 603 629 | 
             
                // when we exit.
         | 
| 604 630 | 
             
                char **p4args = ALLOCA_N( char *, argc + 1 );
         | 
| 605 631 |  | 
| @@ -917,7 +943,7 @@ static VALUE p4map_new( int argc, VALUE *argv, VALUE pClass ) | |
| 917 943 |  | 
| 918 944 | 
             
                // First arg is the class
         | 
| 919 945 | 
             
                // pClass = argv[ 0 ];
         | 
| 920 | 
            -
             | 
| 946 | 
            +
             | 
| 921 947 | 
             
                // Now instantiate the new object.
         | 
| 922 948 | 
             
                self = Data_Wrap_Struct( pClass, 0, p4map_free, m );
         | 
| 923 949 | 
             
                rb_obj_call_init( self, 0, argv );
         | 
| @@ -1066,7 +1092,7 @@ static VALUE p4map_reverse( VALUE self ) | |
| 1066 1092 | 
             
                return rval;
         | 
| 1067 1093 | 
             
            }
         | 
| 1068 1094 |  | 
| 1069 | 
            -
            // | 
| 1095 | 
            +
            //
         | 
| 1070 1096 | 
             
            // P4::Map#translate( string, fwd=true )
         | 
| 1071 1097 | 
             
            //
         | 
| 1072 1098 | 
             
            static VALUE p4map_trans( int argc, VALUE *argv, VALUE self )
         | 
| @@ -1076,7 +1102,7 @@ static VALUE p4map_trans( int argc, VALUE *argv, VALUE self ) | |
| 1076 1102 | 
             
                VALUE		string;
         | 
| 1077 1103 |  | 
| 1078 1104 | 
             
                if( argc < 1 || argc > 2 )
         | 
| 1079 | 
            -
            	rb_raise( rb_eArgError, | 
| 1105 | 
            +
            	rb_raise( rb_eArgError,
         | 
| 1080 1106 | 
             
            		"Invalid arguments to P4::Map#translate. "
         | 
| 1081 1107 | 
             
            		"Pass the string you wish to translate, and an optional "
         | 
| 1082 1108 | 
             
            		"boolean to indicate whether translation should be in "
         | 
| @@ -1197,6 +1223,8 @@ void	Init_P4() | |
| 1197 1223 | 
             
                rb_define_method( cP4, "tagged=",	RUBY_METHOD_FUNC(p4_set_tagged), 1 );
         | 
| 1198 1224 | 
             
                rb_define_method( cP4, "track?", 	RUBY_METHOD_FUNC(p4_get_track)   , 0 );
         | 
| 1199 1225 | 
             
                rb_define_method( cP4, "track=", 	RUBY_METHOD_FUNC(p4_set_track)   , 1 );
         | 
| 1226 | 
            +
                rb_define_method( cP4, "graph?",  RUBY_METHOD_FUNC(p4_get_graph) , 0 );
         | 
| 1227 | 
            +
                rb_define_method( cP4, "graph=",  RUBY_METHOD_FUNC(p4_set_graph) , 1 );
         | 
| 1200 1228 |  | 
| 1201 1229 |  | 
| 1202 1230 | 
             
                // Perforce client settings.
         | 
    
        data/ext/P4/p4clientapi.cpp
    CHANGED
    
    | @@ -359,6 +359,14 @@ void P4ClientApi::SetStreams( int enable ) | |
| 359 359 | 
             
                   ClearStreamsMode();
         | 
| 360 360 | 
             
            }
         | 
| 361 361 |  | 
| 362 | 
            +
            void P4ClientApi::SetGraph( int enable )
         | 
| 363 | 
            +
            {
         | 
| 364 | 
            +
                if ( enable )
         | 
| 365 | 
            +
                   SetGraphMode();
         | 
| 366 | 
            +
                else
         | 
| 367 | 
            +
                   ClearGraphMode();
         | 
| 368 | 
            +
            }
         | 
| 369 | 
            +
             | 
| 362 370 | 
             
            int
         | 
| 363 371 | 
             
            P4ClientApi::GetServerLevel()
         | 
| 364 372 | 
             
            {
         | 
| @@ -480,6 +488,9 @@ P4ClientApi::RunCmd( const char *cmd, ClientUser *ui, int argc, char * const *ar | |
| 480 488 | 
             
                if ( IsStreams() && apiLevel > 69 )
         | 
| 481 489 | 
             
            	client.SetVar( "enableStreams", "" );
         | 
| 482 490 |  | 
| 491 | 
            +
                if ( IsGraph() && apiLevel > 81 )
         | 
| 492 | 
            +
                client.SetVar( "enableGraph", "" );
         | 
| 493 | 
            +
             | 
| 483 494 | 
             
                // If maxresults or maxscanrows is set, enforce them now
         | 
| 484 495 | 
             
                if( maxResults  )	client.SetVar( "maxResults",  maxResults  );
         | 
| 485 496 | 
             
                if( maxScanRows )	client.SetVar( "maxScanRows", maxScanRows );
         | 
    
        data/ext/P4/p4clientapi.h
    CHANGED
    
    | @@ -37,7 +37,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
| 37 37 |  | 
| 38 38 |  | 
| 39 39 | 
             
            /*******************************************************************************
         | 
| 40 | 
            -
             * P4ClientApi class - where we register our Ruby classes and plumb together | 
| 40 | 
            +
             * P4ClientApi class - where we register our Ruby classes and plumb together
         | 
| 41 41 | 
             
             * the components
         | 
| 42 42 | 
             
             ******************************************************************************/
         | 
| 43 43 |  | 
| @@ -56,11 +56,14 @@ public: | |
| 56 56 | 
             
                int SetTrack( int enable );
         | 
| 57 57 | 
             
                int GetTrack()			{ return IsTrackMode() != 0;    }
         | 
| 58 58 |  | 
| 59 | 
            -
                // Set streams mode | 
| 60 | 
            -
             | 
| 59 | 
            +
                // Set streams mode
         | 
| 61 60 | 
             
                void SetStreams( int enable );
         | 
| 62 61 | 
             
                int IsStreams() 			{ return IsStreamsMode() != 0;    };
         | 
| 63 62 |  | 
| 63 | 
            +
                // Set graph mode
         | 
| 64 | 
            +
                void SetGraph( int enable );
         | 
| 65 | 
            +
                int IsGraph()             { return IsGraphMode() != 0;    };
         | 
| 66 | 
            +
             | 
| 64 67 | 
             
                // Returns bool, but may raise exception
         | 
| 65 68 | 
             
                int  SetCharset( const char *c );
         | 
| 66 69 |  | 
| @@ -75,7 +78,7 @@ public: | |
| 75 78 | 
             
                void SetMaxResults( int v )		{ maxResults = v;		}
         | 
| 76 79 | 
             
                void SetMaxScanRows( int v )	{ maxScanRows = v;		}
         | 
| 77 80 | 
             
                void SetMaxLockTime( int v )	{ maxLockTime = v;		}
         | 
| 78 | 
            -
                VALUE SetEnv( const char *var, const char *val ); | 
| 81 | 
            +
                VALUE SetEnv( const char *var, const char *val );
         | 
| 79 82 | 
             
                void SetLanguage( const char *l )	{ client.SetLanguage( l );	}
         | 
| 80 83 | 
             
                void SetPassword( const char *p )	{ client.SetPassword( p );	}
         | 
| 81 84 | 
             
                void SetPort( const char *p )	{ client.SetPort( p );		}
         | 
| @@ -117,7 +120,7 @@ public: | |
| 117 120 | 
             
                VALUE Connected();		// Return true if connected and not dropped.
         | 
| 118 121 | 
             
                VALUE Disconnect();
         | 
| 119 122 |  | 
| 120 | 
            -
                // Executing commands. | 
| 123 | 
            +
                // Executing commands.
         | 
| 121 124 | 
             
                VALUE Run( const char *cmd, int argc, char * const *argv );
         | 
| 122 125 | 
             
                VALUE SetInput( VALUE input );
         | 
| 123 126 |  | 
| @@ -182,8 +185,9 @@ private: | |
| 182 185 | 
             
            	S_CASEFOLDING	= 0x0010,
         | 
| 183 186 | 
             
            	S_TRACK		= 0x0020,
         | 
| 184 187 | 
             
            	S_STREAMS	= 0x0040,
         | 
| 188 | 
            +
                S_GRAPH     = 0x0080,
         | 
| 185 189 |  | 
| 186 | 
            -
            	S_INITIAL_STATE	=  | 
| 190 | 
            +
            	S_INITIAL_STATE	= 0x00C1,   // Streams, Graph, and Tagged enabled by default
         | 
| 187 191 | 
             
            	S_RESET_MASK	= 0x001E,
         | 
| 188 192 | 
             
                };
         | 
| 189 193 |  | 
| @@ -218,6 +222,10 @@ private: | |
| 218 222 | 
             
                void	ClearStreamsMode()	{ flags &= ~S_STREAMS;		}
         | 
| 219 223 | 
             
                int		IsStreamsMode()		{ return flags & S_STREAMS;	}
         | 
| 220 224 |  | 
| 225 | 
            +
                void    SetGraphMode()    { flags |= S_GRAPH;       }
         | 
| 226 | 
            +
                void    ClearGraphMode()  { flags &= ~S_GRAPH;      }
         | 
| 227 | 
            +
                int     IsGraphMode()     { return flags & S_GRAPH; }
         | 
| 228 | 
            +
             | 
| 221 229 | 
             
                private:
         | 
| 222 230 | 
             
                ClientApi		client;
         | 
| 223 231 | 
             
                ClientUserRuby	ui;
         | 
    
        data/lib/P4/version.rb
    CHANGED
    
    | @@ -1,3 +1,3 @@ | |
| 1 1 | 
             
            class P4
         | 
| 2 | 
            -
              Version = VERSION = ' | 
| 3 | 
            -
            end
         | 
| 2 | 
            +
              Version = VERSION = '2017.1.1599185'
         | 
| 3 | 
            +
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: p4ruby
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version:  | 
| 4 | 
            +
              version: 2017.1.1599185
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Perforce Software, Inc.
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date:  | 
| 11 | 
            +
            date: 2017-12-11 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies: []
         | 
| 13 13 | 
             
            description: Ruby extensions to the C++ Perforce API.
         | 
| 14 14 | 
             
            email: support@perforce.com
         |