-
Notifications
You must be signed in to change notification settings - Fork 20
/
RELNOTES.txt
1372 lines (976 loc) · 48.1 KB
/
RELNOTES.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
Release Notes for
P4Python, Helix Core API for Python
Version 2024.2
Introduction
This document lists all user-visible changes to P4Python starting
from release 2007.3, the first supported P4Python release.
Perforce numbers releases YYYY.R/CCCCC, for example, 2007.3/30547.
YYYY is the year; R is the release of that year; CCCCC is the
bug fix change level. Each bug fix in these release notes is
marked by its change number. Any build includes all bug fixes
of all previous releases and all bug fixes of the current
release up to the bug fix change level.
To display the version of P4Python you have installed,
start Python and issue the following commands:
>>> import P4
>>> print(P4.P4.identify())
--------------------------------------------------------------------------
Important End-of-Life Notice
This major release of P4Python would be the last to provide wheels for and
test against Python 3.8. This is part of our commitment to focus on
supported technology platforms
--------------------------------------------------------------------------
Installation
Installation via pip
P4Python can be installed via pip from 2015.1 onwards. Simply run
the command
python3 -m pip install p4python
Note that previous versions of P4Python should be uninstalled first,
since they were built using distutils and not setuptools (the installer
will warn about this). Once installed via pip, future releases of
P4Python can be installed by adding the upgrade option to pip
python3 -m pip install --upgrade p4python
P4Python is distributed as a binary wheels for Python 3.8, 3.9, 3.10,
3.11, 3.12 and 3.13. In order for the binary wheel to be used, the ABI tag needs to
match.This often requires updated pip, to do so issue:
python3 -m pip install --upgrade pip
Installation using Linux binary packages
P4Python can be installed via Linux packages available from:
https://www.perforce.com/perforce-packages
Following packages are available:
RHEL/Rocky Linux 8
perforce-p4python3-python3.8
perforce-p4python3-python3.9
RHEL/Rocky Linux 9
perforce-p4python3-python3.9
Ubuntu 20.04
perforce-p4python3-python3.8
perforce-p4python3-python3.9
Ubuntu 22.04
perforce-p4python3-python3.10
Ubuntu 24.04
perforce-p4python3-python3.12
Installing P4Python for Maya.
Maya has a private python executable called "mayapy".
The instructions for installation are same as in "Building P4Python from Source"
section, except use "mayapy" instead of "python".
--------------------------------------------------------------------------
Upgrading P4Python
When manually upgrading (not using pip or package managers), uninstall any
older versions of P4Python. Some earlier versions of P4Python consisted of
the following files, which must be deleted before installing a later version:
p4.py
p4.pyc
p4.pyo
P4Client.pyd
--------------------------------------------------------------------------
Building P4Python from Source
The official version of P4Python exists as source on:
https://github.com/perforce/p4python
Instructions for building are in the BUILD.md file which can be found here -
https://github.com/perforce/p4python/blob/master/build.md
--------------------------------------------------------------------------
Compatibility Statements
Server Compatibility
You can use any release of P4Python with any release of the
Perforce server later than 2001.1
API Compatibility
This release of P4Python requires at least 2024.2 Perforce API
(2024.2/2675662). Older releases will not compile and are not supported.
Python Compatibility
This release of P4Python is supported building from source with
Python 3.8, 3.9, 3.10, 3.11, 3.12 and 3.13.
For detailed compatibility, please check the following table:
Python Release | P4Python Release
======================================
3.8 | 2020.1 or later
3.9 | 2021.1 or later
3.10 | 2022.1 or later
3.11 | 2022.2 or later
3.12 | 2023.1 or later
3.13 | 2024.2 or later
OpenSSL Compatibility
To build P4Python with encrypted communication support, you must use the
version of OpenSSL that Perforce C/C++ API has been built against.
Beginning with the 2017.1 release of the Helix C/C++ API, the dependency on
OpenSSL is now enforced and the SSL stub library has been removed.
Executables linked against the P4API libraries must also be linked against
real OpenSSL libraries: The latest 3.0.x or 1.1.1 patch is recommended
Platform Compatibility
This release is certified on the following platforms:
Windows for Intel(x86, x86_64)
Server 2016, 2019, 2022
Windows 10, 11
Mac OS
11, 12 (x86_64)
12, 13 (ARM64)
Linux kernel 2.6+ for Intel(x86, x86_64)
Ubuntu 20.04, 22.04, 24.04
CentOS 8
Rocky Linux 9.1
Linux kernel 2.6+ for ARM(aarch64)
Ubuntu 20.04, 22.04, 24.04
Rocky Linux 9.4
The above platforms are tested and subject to regression testing on a
frequent basis. Errors or bugs discovered in these platforms are prioritized
for correction. Any platform not listed above is not actively tested by
Perforce. P4Python may run on platforms that are not actively tested.
Compiler Compatibility
To build P4Python from source, you must use a version of P4Python that has
been compiled with the same compiler used to build the Perforce C++ API.
For most platforms, use gcc/g++.
On Linux since the 2019.1 P4API release, due to a change in library
dependencies, the source code requires gcc 6 or above to be used.
Attempting to use a different compiler or a different version of the
compiler will cause link errors due to differences in name handling.
For more information about P4API compiler requirements, please see this link:
https://www.perforce.com/manuals/p4api/Content/P4API/client.programming.compiling.html
On Windows platforms, the P4Python installer is build with Python from
python.org. The installer for Python 3.x was built with Visual Studio 2017
and Visual Studio 2008 for Python 2.
To run Python 3.x on Windows, it might be necessary to install the
redistributable version of the 2017 libraries, vc_redist.x64.exe or
vc_redist.x86.exe, respectively for 64 bit and 32 bit.
Without these libraries the DLL for P4API will not load into Python and
the command 'import P4' will fail.
Known Limitations
The Perforce client-server protocol is not designed to support
multiple concurrent queries over the same connection. For this
reason, multi-threaded applications using the C++ API or the
script APIs (P4Perl, P4Ruby, etc.) should ensure that a
separate connection is used for each thread or that only one
thread may use a shared connection at a time.
Source Availability
The official version of P4Python exists as source on:
https://github.com/perforce/p4python.
--------------------------------------------------------------------------
Attributes
Perforce P4Python provides the attributes listed below. Attributes
can be set in the P4() constructor or by using their setters and
getters. For example:
>>> import P4
>>> p4 = P4.P4(client="myclient", port="1666")
>>> p4.user = 'me'
Most attributes can be set and read. Attributes are strings unless
noted otherwise.
api_level API compatibility level, INTEGER
charset The character set to use. String,
not a constant as in previous versions
client Client to use (P4CLIENT)
cwd Current Working Directory
debug Debug level (for debugging P4Python), INTEGER
errors Array of errors returned by the server
(Read-Only), LIST
exception_level Determines whether exceptions are thrown,
INTEGER
host Client Host
input Input for next command, can be STRING, LIST
or DICTIONARY
maxlocktime MaxLockTime for commands, INTEGER
maxresults MaxResults for commands, INTEGER
maxscanrows MaxScanRows for commands, INTEGER
p4config_file Returns the config file path (Read-Only)
ignore_file Ignore file used
password Value of P4PASSWD
port Value of P4PORT
prog Name of the script, shown in the server log
server_level Returns the server level (Read-Only)
tagged Boolean value, determines whether to use
tagged mode, INTEGER
ticket_file Returns the name of the ticket file
user Value of P4USER
warnings Array of warnings returned by the server
(Read-Only), LIST
--------------------------------------------------------------------------
Tagged mode and form parsing
In Perforce P4Python 2007.3 and later, form parsing and tagged
output are enabled by default. (In Public Depot P4Python,
tagged output and form parsing mode were disabled by default,
but most scripts enabled them immediately.)
Form parsing cannot be disabled explicitly, but tagged output can
be enabled or disabled by setting p4.tagged as follows:
p4.tagged = False # Disabled
p4.tagged = True # Enabled
This method can be used to disable form parsing, because
form parsing does not work when tagged output is
disabled.
--------------------------------------------------------------------------
Key to symbols used in change notes below.
* -- requires new P4Python
** -- requires new p4d server program
*** -- requires new P4API
--------------------------------------------------------------------------
New functionalities in 2024.2 (2024.2/2682690) (2024/11/15)
#2677188 (Job #122598)
Built P4Python with P4API 2024.2 (2024.2/2675662)
#2670765 (Job #122603)
Added wheels & build support for Python 3.13
#2659612 (Job #122764)
Added Linux binary package for Ubuntu24
Bugs fixed in 2024.2 (2024.2/2682690) (2024/11/15)
#2669917 (Job #123092)
Fixed exception on joining non-string element in run args,
when logger is enabled.
--------------------------------------------------------------------------
New functionalities in 2024.1 Patch 1 (2024.1/2645203) (2024/08/27)
#2643104 (Job #119627)
Added wheels & build support for Linux ARM64/AARCH64 architecture.
Bugs fixed in 2024.1 Patch 1 (2024.1/2645203) (2024/08/27)
#2630486 (Job #121699)
Fixed error in P4.P4Exception class when creating object of class
with single string parameter.
#2630485 (Job #121721)
Implemented p4.maxopenfiles and p4.maxmemory group specs as P4 Class
instance attributes.
--------------------------------------------------------------------------
New functionalities in 2024.1 (2024.1/2625398) (2024/07/17)
#2603816 (Job #120930)
Built P4Python with P4API 2024.1 (2024.1/2596294)
#2621458 (Job #115700)
Improved the readability of P4Exception with str(e) and
provided more detailed information in repr(e).
#2624271 (Job #119953)
Added p4.setbreak(), equivalent to P4API ClientApi::SetBreak(),
to enable P4 command interruption. Use a PyKeepAlive object
with p4.setbreak() to set a callback every 0.5 seconds during
command execution for terminating connections.
Bugs fixed in 2024.1 (2024.1/2625398) (2024/07/17)
#2602772 (Job #116089)
Fixed 'SetuptoolsDeprecationWarning: setup.py install is deprecated'
by switching wheel/package installation to 'pip' instead of outdated
'setup.py install'.
#2591727 (Job #120437)
RPM packages now includes supported OS version in name string.
--------------------------------------------------------------------------
Bugs fixed in 2023.2 Patch 2 (2023.2/2581979) (2024/04/05)
#2558218 (Job #094891)
Manylinux wheels now supports parallel threaded sync
without requiring the execution of a copy of "p4".
--------------------------------------------------------------------------
New functionality in 2023.2 Patch 1 (2023.2/2543803) (2024/01/22)
(Job #118907)
This release is built against P4API (2023.2/2519561),
to address possible vulnerability: CVE-2023-5759.
#2542109 (Job #117135)
Made P4Exception object pickleable.
--------------------------------------------------------------------------
New functionality in 2023.2 (2023.2/2527637) (2023/12/04)
#2522046 (Job #117813)
Built P4Python with P4API 2023.2 (2023.2/2519561)
--------------------------------------------------------------------------
New functionality in 2023.1 Patch 2 (2023.1/2509188) (2023/10/25)
#2503929 (Job #117105)
Added wheels & build support for Python 3.12
--------------------------------------------------------------------------
New functionality in 2023.1 Patch 1 (2023.1/2477632) (2023/08/21)
#2475832, #2471641, #2468946 (Job #114714)
We now publish P4Python package for Rocky Linux 9
--------------------------------------------------------------------------
Bugs fixed in 2023.1 Patch 1 (2023.1/2477632) (2023/08/21)
#2475148 (Job #116894)
Fixed an erroneous conditional statement in setup.py which resulted in
incorrect OpenSSL version definition in certain scenarios
#2471616 (Job #116753)
Fixed an issue where P4.identify() was returning quoted strings in the
revision identifier on Windows platform. It is now consistent with
Linux based platforms
--------------------------------------------------------------------------
New functionality in 2023.1 (2023.1/2454917) (2023/06/15)
#2449421, #2449107 (Job #115666)
Built P4Python with P4API 2023.1 (2023.1/2442900)
--------------------------------------------------------------------------
New functionality in 2022.2 Patch 2 (2022.2/2543766) (2024/01/18)
(Job #118907)
This release is built against P4API (2022.2/2531894),
to address possible vulnerability: CVE-2023-5759.
--------------------------------------------------------------------------
New functionality in 2022.2 Patch 1 (2022.2/2428370) (2023/04/13)
#2427292 (Job #113073)
Added wheels & build support for Python 3.11
--------------------------------------------------------------------------
New functionality in 2022.2 (2022.2/2425690) (2023/04/04)
#2421979 (Job #114236)
Built P4Python with P4API 2022.2 (2022.2/2407422)
#2422290 #2422824 (Job #108702, #110277)
Added wheel & build support for Apple M1 (ARM64) architecture
--------------------------------------------------------------------------
New functionality in 2022.1 Patch 2 (2023/02/09)
Important security note
This version addresses vulnerabilities in OpenSSL (CVE-2023-0286,
CVE-2023-0215, CVE-2022-4450, CVE-2022-4304) by linking in version
1.1.1t of the library.
--------------------------------------------------------------------------
New functionality in 2022.1 Patch 1 (2022/11/11)
#2353468 (Job #112534) *
Changed download of C++ P4API to HTTPS instead of FTP.
--------------------------------------------------------------------------
Bug fixes in 2022.1 Patch 1 (2022/11/11)
(Job #112736) * ***
Correct the handling of untranslated text left in the
compression buffer on Close(). Build only change.
--------------------------------------------------------------------------
New functionality in 2022.1
#2281584 (Job #109173) * ***
Added support for Python 3.10.
#2269851 (Job #111022) * ** ***
Updated the spec templates to match the 2022.1 Helix Server specs.
--------------------------------------------------------------------------
New functionality in 2021.1 Patch 1
(Job #109912 ) * ***
Windows and Mac builds have updated version of OpenSSL(1.1.1n),
to address possible vulnerability: CVE-2022-0778.
Linux builds are not affected.
--------------------------------------------------------------------------
New functionality in 2021.1
#2118072 (Job #105058) * ***
Added support for Python 3.9.
#2118073 (Job #106304) * ** ***
Updated the spec templates to match the 2020.1 Helix Server specs.
Bug fixes in 2021.1
#2124007 (Job #105472) * ***
Fixed clean-up of locked temp workspaces.
--------------------------------------------------------------------------
New functionality in 2020.1 Patch 1
(Job #104856) * ***
Windows and Mac builds have updated version of OpenSSL(1.1.1i),
to address possible vulnerability: CVE-2015-0288.
Linux builds are not affected.
--------------------------------------------------------------------------
New functionality in 2020.1
#1979782 (Job #100909) * ***
Added support for Python 3.8.
#1971901 (Job #102669) * ** ***
Updated the spec templates to match the 2020.1 Helix Server specs.
--------------------------------------------------------------------------
New functionality in 2019.1
#1804040 (Job #98777) * ***
P4Python now requires p4api 2019.1
Added OSX support for 10.14, removed support for 10.8 and earlier
Added additional libraries from p4api 19.1 to the link lines on all
platforms. Fixed name conflicts between p4python modules and p4api
extensions.On Linux, detect glib version so the correct p4api libraries
are downloaded and linked.
#1804040 (Job #97426) * ***
Will now link with either openssl 1.0.2 or 1.1.1
#1804040 (Job #98778) *
On Linux, if -ssl is not specified, will look for compatible ssl
libraries, and if not found, will download the openssl source, and build
and install it.
#1894940 * (Job #98779) *
Fixed Windows issue where OpenSSL library names changed with
Openssl 1.1.0+
Bug fixes in 2019.1
#1804040 (Job #98261) *
Changed setup.py to use subclasses, and process arguments the way
setuputils wants.
#1894940 (Job #98423) *
Regex change to allow for space/extra characters in OpenSSL version
#1841909 (Job #99571) *
Memory leak in P4Result::Reset
#1841909 (Job #99549) *
Memory leak in Exception Handler
#184040 (Job #98782) *
P4Python does not install correctly with Maya 2019 "mayapy" interpreter
#1812102 (Job #98261) *
P4Python attempts to download P4API every time, ignoring --apidir
--------------------------------------------------------------------------
New functionality in 2018.2
#1725050 (Job #95692) *
Added support for Python 3.7.
--------------------------------------------------------------------------
New functionality in 2017.2
Bug fixes in 2017.2
#1612945 (Job #85554, #94070) *
Removed memory leak (and potential crashes) caused by P4.P4Message,
P4.P4MergeData, P4.P4ActionMergeData and P4.P4Map not being
correctly initialised.
#1614534 (Job #93512) *
Protect p4.run_resolve(resolver=Resolver()).
If the resolver object returns anything but a string, check and
throw a warning instead of crashing Python.
#1613710 (Job #90903) *
Extend the prog string with the Python, P4Python and P4API version
to enhance debugging and logging. The appended string looks like
this [PY3.6.3/P4PY2017.2/API2018.1/1592142] and will be appended
even if P4.prog is set by the user.
#1613337 (Job #93280) *
Clean up temporary P4API files if downloaded from the ftp site. This
is particular useful if P4Python is installed via pip by multiple
users on a shared server.
#1562323 (Job #92590) *
Permit assignment of single string values to spec fields that
require a list, for example the 'View' or 'AltRoots' field in the
client spec. The string is treated like an array of 1 element. When
reloading the spec, the field will be converted to an array.
#1602183 (Job #86321) *
Ensure context handlers correctly reset values if an exception is
thrown inside the body of the context handler. This also applies if
the context is set inside the run method as a karg, for example:
p4.run_info(tagged=False)
--------------------------------------------------------------------------
New functionality in 2017.1
#1525945 *
Protect automatic P4Python installs from P4API changes. This makes sure
that 'pip install p4python' on Linux uses the tested version of P4API.
#1523857 *
Added support for graph depots (Helix4Git). P4.graph is set to 1
by default to enable graph commands. Support can be disabled by setting
P4.graph to 0.
#1500363 (Job #90902) *
Added support for P4.p4config_files, which returns a list of p4config
files in case of nested usage. P4.p4config_file (note the missing s)
only returns the outermost config file.
#1501292 *
Added support for setting (client-side) tunables:
P4.set_tunable(key, value)
P4.get_tunable(key)
--------------------------------------------------------------------------
New functionality in 2016.2
#1446623 * ** ***
Added support for P4Map.translate_array.
This method is useful when translating ditto (&) mapping, which can
result in more than one answer.
Bug fixes in 2016.2:
#1477171 (Job #89757) *
Fixed parsing expression for the output of 'openssl version' for
1.0.2. This fix allows P4Python to be build with SSL support on
Ubuntu Xenial (16.04) when installing via pip.
#1436215 *
P4.clone() without a directory parameter would segfault if the
target directory is already in use. Now the exception will print
out directory '.' instead.
Bug fixes in 2016.2 Patch 1
#1497579 (Job #90749) *
Removed spurious output of "*** It is not a list, I am confused"
when parsing hand-crafted spec strings with added comments.
#1493809 *
Protect encoding test case from crashing macOS Sierra (10.12)
--------------------------------------------------------------------------
New functionality in 2016.1
#1399690 * ** ***
Comments in the protection table are now supported by P4.Spec.
The comment is preserved as part of each protection table entry,
so a script parsing the protection table needs to be able to expect
an entry to be followed by a hash (#) and a comment.
#1369476 (Job #83827) *
Installing P4Python via pip under Linux will now attempt to link
against the OpenSSL libraries if installed. If no suitable OpenSSL
library can be found, P4Python will be installed without SSL support.
#1349961 * **
Added P4.define_spec, which makes it possible to preload the spec cache
with a spec definition. This is particularly useful when used with
form-triggers that use the new 2016.1 variable %specdef%.
#1349960 * ** ***
Support for ditto (&) mapping in P4.Map.
Bugs fixed in 2016.1 Patch 1:
#1445730 (Job #88664) *
P4.Map() correctly handles overlay mappings again.
#1442582 (Job #88605)
P4.run_login now takes an optional "password" keyword. This
simplifies the login process from this:
p4.password = "secret"
p4.run_login()
to this:
p4.run_login(password="secret")
#1443446 (Job #88606)
Logging interface now logs warnings and errors as well.
--------------------------------------------------------------------------
New functionality in 2015.2
Bugs fixed in 2015.2
#1315696
Added arguments and keyword arguments (args and kargs) to
P4.run_login and P4.run_password for completeness.
#1319215 (Job #81071)
Use C++ P4API for 'p4 init' and 'p4 clone'. The 2015.1
implementation required a P4 executable in the path of the script.
#1316068 (Job #84024)
Updated the spec map in line with the 2015.2 server changes.
Bugs fixed in 2015.2 Patch 1
#1338889 (Job #84749)
Improve encoding for Python3 to allow sending Unicode strings
to a non-Unicode server without converting the strings to UTF8.
Also adds the ability to encode strings yourself and send bytes-
encoded strings instead.
#1340547
Fixed spec string for "typemap", "protect" and "triggers" commands.
#1341514
Added test cases for spec parsing and formatting.
--------------------------------------------------------------------------
New functionality in 2015.1
#1039185 (Job #78154) * **
Support for new DVCS commands 'p4 init' and 'p4 clone'. The commands
are implemented as factory methods P4.init and P4.clone respectively
and create a new P4 instance pointing to the DVCSworkspace.
#1005721 (Job #062356) *
Support for PyPi. P4Python can now be installed with a simple:
pip install p4python
on many supported platforms as a binary install, and as source on
Linux, where it will attempt to automatically build.
#1042731 *
Support for automatically downloading P4API on appropriate
platforms. If P4Python is built without the --apidir switch, setup
will now attempt to connect to ftp.perforce.com to download the
correct P4API binary for this platform and unpack it in a temporary
directory.
#1042578 *
Support for automatic SSL-enabled builds. If the switch --ssl is
provided without a path, setup will attempt to determine the correct
path of the SSL libraries by running 'openssl version'.
--------------------------------------------------------------------------
New functionality in 2014.2
#945604 * ***
P4ENVIRO file can now be enquired and set within P4Python through
the string variable P4.p4enviro_file.
#948607 *
Support Python logging interface.
When a Python logger is assigned to P4.logger, P4Python will log all
commands executed through the P4.run interface as INFO.
Additionally, any warning or error from Perforce is reported as
INFO, WARNING or ERROR in the log. By setting a logger, P4.debug is
automatically set to 1 to facilitate command logging. Setting a
higher value of P4.debug will also log additional information as
DEBUG. The logging reporting level in the assigned logger and
handlers must be set to the correct level to see any log output.
--------------------------------------------------------------------------
New functionality in 2014.1
#779528 (Job #64555) * ***
Added P4.is_ignored(<path>), which allows a user to determine
whether a particular file is ignored via the P4IGNORE feature.
<path> needs to be a local relative or absolute path.
Call P4.ignore_file to see which P4IGNORE file is used. Setting
P4.ignore_file has to happen before the first time P4.is_ignored()
is used and has no influence on the environment.
#706047 (Job #64849) *
Added context manager for temporary workspaces in P4Python.
P4.temp_client(prefix, template) will create a temporary workspace
based on the template. The client workspace name starts with the
prefix to make it easy to exclude the workspace from the spec depot.
Use this feature with the Python "with" keyword.
Bugs fixed in 2014.1
#895310 (Job #74027) *
If a form-out trigger prints out a message before sending the spec,
P4#fetch_spec would swallow the spec file (such as change or client)
and only print the message. This is now fixed.
#736768 *
P4Python now builds on Mac OSX Maverick (i.e. Darwin 13)
P4.identify() will report P4PYTHON/DARWIN100X86_64
#706046 (Job #68737)*
Fixed P4.iterate to reject illegal commands.
#693300 (Big #69143) *
Added P4.disable_tmp_cleanup to prevent cleanup if temporary
objects. Invoke this before connecting if you are using multiple P4
connections in parallel in a multi-threaded Python application.
--------------------------------------------------------------------------
Bugs fixed in 2013.1
#628525 *
When using Python 3.X P4Python created a memory leak for
every call. This has now been fixed. Note that the
fix requires upgrading to Python 3.3. All previous version of
Python 3.X are not supported and P4Python 2013.1 will not
compile with these releases.
#634817 *
Reformatted P4.py to use spaces instead of tabs, following
the Python coding standard.
--------------------------------------------------------------------------
New functionality in 2012.3
#533539 *
P4Python is now compatible with Python 3.3 and will complete
all test cases.
#564572 (Job #59272) *
Comments in forms are now preserved in the spec object when using
P4.parse_spec. The comment can be accessed and changed through the
P4.Spec.comment attribute. Comments are used by the P4.format_spec
methods such as P4.format_client(). This is useful for form-out
triggers.
#568867 *
When decoding strings in Python 3 from a non-Unicode Perforce
server, P4Python normally assumes that all strings are encoded in
UTF8. P4.encoding can be set to a legal Python encoding to change
the decoding of any content from the Perforce Server. If P4.encoding
is set, any decoding error will cause an exception to be thrown.
The special encoding 'raw' can be used to receive Python bytes
instead of Unicode strings.
P4.encoding is only available when compiled with Python 3.
Bugs fixed in 2012.3
#564572 (Job #32834) *
In Python 3 it was impossible to reset the charset to None or ''.
This is now fixed.
--------------------------------------------------------------------------
New functionality in 2012.2
#524819 (Job #59800) *
P4Python now supports Apple Mountain Lion (10.8).
#503392 (Job #56081) *
P4.run_print() would return None for a non-existing file.
Now it returns [] for consistency.
#503375 (Job #56479) *
Added P4.run_tickets() method to list local tickets.
Note that P4.run('tickets') still gives the old error
message "Must upgrade to 2004.2 p4 to access tickets."
#498110 (Job #56512) * ** ***
Support for the new progress indicator API. P4Python
supplies a new progress attribute, which can take an
instance of P4.Progress class or subclass. Progress
information is currently only supported for submits and
sync -q. Details can be found in the documentation.
#491236 (Job #57828) *
New convenience method P4.iterate_<specs>() that allows
easy iteration through some or all spec objects such as
clients or changes. Details can be found in the documentation.
Bugs fixed in 2012.2
#513715 (Job #59191) *
Fixed a bug where P4Python would leak memory when calling
an OutputHandler, and would leak more memory if the
OutputHandler returned HANDLED.
#512425 (Job #58722) *
P4#parse_client could raise the exception "Unknown field name
'StreamAtChange'." when parsing a stream client workspace.
Internal spec definition has been updated to resolve this.
--------------------------------------------------------------------------
New functionality in 2012.1
#403096 (Job #51898) * ** ***
Enable "action resolve" to support resolves of branches,
deletes and file types. The existing P4.Resolver class
has been extended with a new method actionResolve() that
will be invoked if an "action resolve" is required.
Details can be found in the documentation.
#411866 (Job #51896) * ** ***
P4Python supports SSL connections if compiled with SSL
support. Instructions on how to compile with SSL support can
be found at the top of this document under "Building P4Python
from Source" and in the documentation.
P4.identify() will then report the version of the OpenSSL
library used for building the Perforce C++ API (not the
version P4Python is linked against).
Bugs fixed in 2012.1:
#510916 (Job #59060) *
Fixed a bug where P4Python would increment the reference
count of an OutputHandler each time run was called.
#446148 (Job #55062) *
Fixed a test hardness due an incompatibility with Python 2.6
#397007 (Job #49820) *
A fatal server error would leave P4Python in an undefined
state which would result in incorrect output for
successive commands. P4Python will now disconnect and
clean up when encountering a fatal error.
#420204 (Job #52909) *
Python would crash with a segmentation fault if a custom
Resolver object was used to resolve binary files. Fixed.
--------------------------------------------------------------------------
New functionality in 2011.1
#328169 (Job #45862) * **
Enable streams in P4Python by default. With this change,
streams specific specs such as streams depots are listed.
Disable the listing of streams specific specs by either
setting the api_level to a value below 70 or by disabling
stream handling explicitly through the P4.streams attribute:
p4.streams = False
#318056 *
All run methods now support keyword arguments in order
to disable 'tagged' mode or to provide an OutputHandler
for a single command only without having to wrap the command
in a 'with' block:
p4.run_counter('mycounter', tagged = False)
p4.run_files('//...', handler = MyOutputHandler() )
More than one keyword argument can be provided if required.
All attributes that can be changed for an active connection
can be provided as keyword arguments.
#317619 (Job #42251) *
P4Python supports a callback interface by providing a
P4.handler attribute. Set P4.handler to an instance of a
subclass of P4.OutputHandler to enable callbacks.
When a handler is defined, P4Python will invoke the handler
for every response it receives from the Perforce Server
immediately instead of collecting all results together in
an array first. This can be used to make applications more
scalable and more responsive if large results are expected.
See the documentation for details on the OutputHandler class.
#331330 (Job #43211) *
P4Python now allows setting P4 registry values on Windows and
Mac OS. P4.set_env(name, value) sets an entry and P4.set_env(name)
deletes the entry. This is equivalent to running
'p4 set name=value' from the command line.
Bugs fixed in 2011.1
#385159 (Job #49324) ***
On Windows Vista, Windows 7, or Windows 2008, a client running as
Administrator would fail to properly process file names in
non-ASCII character sets (such as Shift-JIS).
#328989 (Job #44038) *