Release Notes for Helix Git Fusion 2017.1-patch1 Introduction Git Fusion provides a bidirectional gateway between Helix Versioning Engine and Git. Through Git Fusion, Git users see the Helix Versioning Engine as a Git remote repository. Perforce numbers releases YYYY.R/CCCCCC, for example, 2012.1/40716. YYYY is the year; R is the release of that year; CCCCCC is the bug fix change level. Each bug fix in these release notes is marked by its change number. Any build includes (1) all bug fixes of all previous releases and (2) all bug fixes of the current release up to the bug fix change level. Please send all feedback to support@perforce.com. Requirements * Supported Platforms (Git Fusion server): * Linux Intel x86_64: Ubuntu 12.04 LTS Ubuntu 14.04 LTS CentOS/Red Hat 6.x CentOS/Red Hat 7.x not recommended: http setup too difficult Note: CentOS 5.x, Red Hat 5.x and similar distributions are not supported. * For SSL Support between Git Fusion and the Helix Versioning Engine (P4D): Helix Versioning Engine requires OpenSSL 1.0.1+. The install scripts will try to retrieve and install an appropriate version as part of their building of the Git Fusion environment. The OVA and Package installations include support for SSL connections to the Helix Versioning Engine. * Supported Platforms (Git users): * Any operating system * Git 1.7.x or later * Git LFS 1.0.2 or later * The Helix Versioning Engine IMPORTANT: All triggers on the connected server other than the one provided with Git Fusion must not fail any action being performed by the git-fusion-user. See the documentation for how to implement local policies using Git Fusion hooks. Git Fusion requires Helix Versioning Engine (P4D) version * P4D 2015.1/1256673 or later * P4D 2015.2/1252060 or later * Cluster mode is supported for scalability but not for high availability. If there is a failover during a Git Fusion operation, the repositories may be left in an locked state and will require manual interaction to recover. * Case-insensitive Helix Versioning Engines are permitted, but not recommended. Pre-flight hooks required to minimize case-conflicts. Case-conflicts which occur may require manual interaction to recover. * Git Fusion will configure itself as read-only when connected to an Edge mode or Forwarding Replica Helix Versioning Engine. Git users must configure their remotes to fetch from the local Git Fusion and push to a different Git Fusion connected directly to the commit server. Please contact Support for details on this type of configuration. * Helix P4Broker or Helix P4Proxy, if used, must be 2015.1 or later and match the selected Helix Versioning Engine version * Helix P4Python 2014.1/925900 or later is supported though 2015.1/1062785 or later is recommended. * Python 3.3.2 and * libgit2 module v0.22.0 * pygit2 module v0.22.0 * pytz module v2013b * sqlite3 module Note: The submit trigger supports Python 2.6+ or Python 3.2+. * Git 1.7.9.5 or later (for Git Fusion server usage) * Git Fusion packages, OVA, and install scripts provide Git 2.7.4. * For manual installations of Git Fusion, make sure that Git is built with the cURL development files, otherwise HTTP(S) authentication will not function. Here are the packages that would need to be installed prior to building Git: CentOS RPM package: libcurl-devel Ubuntu Deb package: libcurl4-openssl-dev * OpenSSH or compatible server (any version) * Configure-git-fusion.sh will optionally install and configure HTTPS access for Git users on Ubuntu 12.04, 14.04 and CentOS 6.x. Note: Installing HTTPS access is not automated for those installations where Apache is already installed, Apache configuration files are present, the Git Fusion installation user is not 'git', or git's HOME is not '/opt/perforce/git-fusion/home/perforce-git-fusion'. * Git Fusion will download and install Apache 2.2/2.4 and the Apache modules ssl and mod_authnz_external * Do not use this Apache server for any other purpose * Apache will be configured to run as the user 'git' * For CentOS installations, SELinux will be set to 'permissive' * This configuration will create and use a self-signed certificate. To use a different certificate, change the specification in the Apache VirtualHost configuration for Git Fusion. * Helix Command Line (P4 command-line client) 2015.1 or later * Supported Virtualization Software (if running Git Fusion OVA): * Oracle VM VirtualBox: VirtualBox 4.0+ * VMWare: ESX/ESXi 3.5, 4.x, 5.x vCenter 2.5, 4.x, 5.x Server 1.0.6, 2.0 Workstation 6.5.x, 7.x Note: By default the OVA requests the hostname and network information from vSphere (if available) on boot. This behavior can be disabled, restoring hostname control to the Ubuntu OS: sudo vi /opt/vmware/share/vami/vami_ovf_process comment out "setHostName(hostname)" on line 477 If this is done, the virtualization controller will not be able to set the hostname. * Git Fusion server filesystem cannot be a network share. Neither TMPDIR nor ~/.git-fusion can be a network share. * Git Fusion server environment must set LANG to use UTF-8 encoding, such as "en_US.UTF-8". Language and region can be other than "en_US" if your server environment has tables for it. * Git repos larger than 1GB are not recommended. Git itself has significant scalability issues with such repositories. Not the least of which is the server resource consumption used by 'git' itself when dealing with these repos. Repos above 1GB require several times their size in memory, faster processors, and speedy disks to attempt to compensate. Ultimately, large repos will hit a limit depending on budget and user patience. Documentation The Perforce Git Fusion Guide is publicly available on perforce.com. Installation Installation instructions are in the Perforce Git Fusion Guide. Git Fusion requires the installation of submit triggers on the connected Helix Versioning Engine. These triggers provide the atomic push semantics for processing of Git user changes. Without this protection, a given set of commits from Git may be partially processed and therefore damage the repository. Upgrading From Previous Versions of Git Fusion: Upgrading from Git Fusion 2016.2 or earlier: --------------------------------- The p4 key names have changed which control disabling new Git Fusion sessions/connections. Prevent all new sessions to Git Fusion: git-fusion-prevent-sessions-all Prevent new sessions on a specific instance: git-fusion-prevent-sessions-instance-- Prevent new sessions on a specific repo: git-fusion-prevent-sessions--repo Prevent new sessions on a specific instance for a specific repo: git-fusion-prevent-sessions-instance-repo---- New sessions for p4 users who are members of p4 group 'git-fusion-admin' are NOT prevented by these keys. See the Git Fusion guide for details. Upgrading from Git Fusion 2015.2+: --------------------------------- These instructions are ONLY for upgrading from Git Fusion 2015.2 or higher. For other upgrades, see subsequent sections. This version of Git Fusion does not require any changes to the Helix server data store. The upgrade process requires that you quiesce the Git Fusion server being upgraded, install new Git Fusion source, and update triggers on your Helix server. If your site has made any changes to the Git Fusion source, or to the submit trigger script, they will be erased. Note: The connected Helix server must be 2015.1 or later. 1 Quiesce the Git Fusion system by setting the p4 key as a Helix admin: p4 key git-fusion-prevent-new-sessions true 2 Wait until all other sessions of Git Fusion have stopped running. Check by running: p4 keys -e 'git-fusion-*-lock' This should return no results when all Git Fusion services have stopped. 3 Upgrade using the system package manager. Ensure that package.perforce.com is configured as the repo source (see the Git Fusion Guide for details). a) For existing Ubuntu (Debian) installations: and for existing OVA (Ubutu) installations: sudo apt-get update sudo apt-get install helix-git-fusion* (apt-get will install new and upgrade existing packages as needed) b) For existing CentOS/RHL (RPM) installations: yum install helix-git-fusion* (yum will install new and upgrade existing packages as needed) c) For existing custom installations: This step applies to those installations which were done without the use of O/S Packages or the OVA. This includes scripted installations and those where each dependency was built from source. Replace the contents of your existing Git Fusion installation directory (e.g. /usr/local/git-fusion/bin or /opt/perforce/git-fusion/libexec) with the contents of the bin directory from the source distribution tarball, git-fusion.tgz. Upgrade the installed version of P4Python by running the provided upgrade script as root or a user who can sudo: e.g. /usr/local/git-fusion/bin/p4python_14.1_upgrade.sh Upgrade pygit2/libgit2 to version 0.22.0: /usr/local/git-fusion/bin/pygit2_libgit2_0.22.0_upgrade.sh Review the installation requirements at the beginning of this document, and upgrade your system as necessary to meet or exceed them. 4 If you have changed the path to Git Fusion's scripts within the Git Fusion server, update Git's hooks so that Git that they can find the correct version of Git Fusion: /usr/local/git-fusion/bin/p4gf_update_hooks.py --all This is rare: most customers leave Git Fusion where the installers expect, avoiding this additional work. 5 Repeat steps 2 and 3 for each Git Fusion server connected to your Helix server. 6 Run the configure-git-fusion.sh script on each Git Fusion server connected to your Helix Versioning Engine to add/update required settings. 7 Update the Git Fusion triggers on your Helix Versioning Engine. There are two ways to accomplish this task: a. If your Helix Versioning Engine is on a Git Fusion supported platform (see requirements at the beginning of this document) you may install Git Fusion triggers with packages: First, ensure that package.perforce.com is configured as an apt or yum repo source (see installation instructions in the Git Fusion Guide for more information). Next, if it is an existing installation, remove the Perforce Git Fusion trigger package with one of the two following commands: * sudo apt-get remove perforce-git-fusion-trigger * yum remove perforce-git-fusion-trigger Alternatively, in case of a custom installation, manually delete p4gf_submit_trigger.py and p4gf_submit_trigger_wrapper.sh files. Finally, install the Helix Git Fusion Trigger package. How you do this depends on which platform your Helix Versioning Engine is running on: * If running on a Debian supporting platform, run the following two commands: sudo apt-get update sudo apt-get install helix-git-fusion-trigger * If running on an RPM supporting platform, run the following command: yum install helix-git-fusion-trigger b. Copy the new p4gf_submit_trigger.py and p4gf_submit_trigger_wrapper.sh (for Linux servers) files over the old ones. After following the steps in a or b, set up triggers using the install option: python p4gf_submit_trigger.py --install If you have edited the trigger script with customizations for your site, then you need to contact support@perforce.com to find out if and how these changes should be implemented in the new trigger script. 8 Re-enable Git Fusion by removing the p4 key: p4 key -d git-fusion-prevent-new-sessions Upgrading from Git Fusion 2013.1-2015.1: --------------------------------- This version of Git Fusion does not require any changes to the Helix Versioning Engine (P4D) data store. This version of Git Fusion does require that you uninstall any previous version of Git Fusion. This version has new dependencies and package names: it cannot coexist with older versions of Git Fusion. The upgrade process requires that you quiesce the Git Fusion server being upgraded, uninstall the previous Git Fusion source, install new Git Fusion source, and update triggers on your Helix Versioning Engine. If your site has made any changes to the Git Fusion source, or to the submit trigger script, they will be erased. Note: The connected Helix Versioning Engine must be 2015.1 or later. 1 Make sure your Helix Versioning Engine (P4D) is 2015.1/1171507 or later. p4 info 2 Quiesce the Git Fusion system by setting the p4 key as a Helix admin user: p4 key git-fusion-prevent-new-sessions true 3 Wait until all other sessions of Git Fusion have stopped running. Check by running: p4 keys -e 'git-fusion-*-lock*' This should return no results when all Git Fusion services have stopped. 4a For existing Ubuntu (Debian) installations: Remove Perforce Git Fusion packages and their dependencies: sudo apt-get remove perforce-git-fusion* perforce-3rdparty* (removing packages will not delete your data or configuration files) 4b For existing RPM installations: Remove Perforce Git Fusion packages and their dependencies: yum remove perforce-git-fusion* perforce-3rdparty* (removing packages will not delete your data or configuration files) 4c For existing OVA installations: To upgrade from 2015.1 to 2015.2 version: Prevent removal of required configuration files in perforce-git-fusion-ova-builder package: sudo cp /dev/null /var/lib/dpkg/info/perforce-git-fusion-ova-builder.list Remove Perforce Git Fusion packages and their dependencies: sudo apt-get remove perforce-git-fusion* perforce-3rdparty* (removing packages will not delete your data or configuration files) Continue with instructions in 5a. 5a For existing Ubuntu (Debian) installations: Ensure that package.perforce.com is configured as an apt repo source (see the Git Fusion Guide for more information), then install Helix Git Fusion packages and their dependencies: sudo apt-get update sudo apt-get install helix-git-fusion* 5b For existing RPM installations: Ensure that package.perforce.com is configured as a yum repo source (see the Git Fusion Guide for more information), then install Helix Git Fusion packages and their dependencies: yum install helix-git-fusion* 5c For existing OVA installations: Starting with 2015.1, the Git Fusion OVA is built from Debian packages. This means, you can upgrade OVA installations using steps outlined in 5a. 5d For existing custom installations: This step applies to those installations which were done without the use of OS-Specific Packages or the OVA. This includes scripted installations and those where each dependency was built from source. Replace the contents of your existing Git Fusion installation directory (e.g. /usr/local/git-fusion/bin or /opt/perforce/git-fusion/libexec) with the contents of the bin directory from the source distribution tarball, git-fusion.tgz. Upgrade the installed version of Helix P4Python by running the provided upgrade script as root or a user who can sudo: e.g. /usr/local/git-fusion/bin/p4python_14.1_upgrade.sh Upgrade pygit2/libgit2 to version 0.22.0: /usr/local/git-fusion/bin/pygit2_libgit2_0.22.0_upgrade.sh Review the installation requirements at the beginning of this document, and upgrade your system as necessary to meet or exceed them. 6 If you have changed the path to Git Fusion's scripts within the Git Fusion server, update Git's hooks so that Git that they can find the correct version of Git Fusion: /usr/local/git-fusion/bin/p4gf_update_hooks.py --all This is rare: most customers leave Git Fusion where the installers expect, avoid this additional work. 7 Repeat steps 3 through 5 for each Git Fusion server connected to your Helix Versioning Engine. 8 Run the configure-git-fusion.sh script on each Git Fusion server connected to your Helix Versioning Engine to add/update required settings. 9 Update the Git Fusion triggers on your Helix Versioning Engine. There are two ways to accomplish this task: a. If your Helix Versioning Engine is on a Git Fusion supported platform (see requirements at the beginning of this document) you may install Git Fusion triggers with packages: First, ensure that package.perforce.com is configured as an apt or yum repo source (see installation instructions in the Git Fusion Guide for more information). Next, if it is an existing installation, remove the Perforce Git Fusion trigger package with one of the two following commands: * sudo apt-get remove perforce-git-fusion-trigger * yum remove perforce-git-fusion-trigger Alternatively, in case of a custom installation, manually delete p4gf_submit_trigger.py and p4gf_submit_trigger_wrapper.sh files. Finally, install the Helix Git Fusion Trigger package. How you do this depends on which platform your Helix Versioning Engine is running on: * If running on a Debian supporting platform, run the following two commands: sudo apt-get update sudo apt-get install helix-git-fusion-trigger * If running on an RPM supporting platform, run the following command: yum install helix-git-fusion-trigger b. Copy the new p4gf_submit_trigger.py and p4gf_submit_trigger_wrapper.sh (for Linux servers) files over the old ones. After following the steps in a or b, set up triggers using the install option: python p4gf_submit_trigger.py --install If you have edited the trigger script with customizations for your site, then you need to contact support@perforce.com to find out if and how these changes should be implemented in the new trigger script. 10 Re-enable Git Fusion by removing the p4 key: p4 key -d git-fusion-prevent-new-sessions Upgrading from Git Fusion 2012.2: --------------------------------- Please contact support@perforce.com for assistance in upgrading from a 2012.2 Git Fusion installation. Installing without upgrading: ----------------------------- Please contact support@perforce.com for assistance if you choose to keep multiple versions of Git Fusion side-by-side in different directories, copy configurations from one installation to another. The upgrade scripts do not cover this case. Note, Git Fusion 2015.2 and Git Fusion 2015.1 cannot share the same machine nor be connected to the same Helix Versioning Engine. Improving Pull/Clone Performance: Git Fusion includes a script 'p4gf_poll.py'. By calling this within a cronjob, the Git Fusion cached Git repositories can be kept up-to-date with the content within Helix Versioning Engine. This will improve the clone and pull performance for users. Uninstalling Git Fusion Uninstallation of Git Fusion *does not* remove any change history from Helix Versioning Engine. Commits pushed to Git Fusion are forever preserved on mapped and lightweight Helix branches. An administrator must explicitly 'p4 obliterate' such files to remove them. The steps below only remove Git Fusion caches and repo configuration data from the Helix Versioning Engine. They remove all Git Fusion related files from individual Git Fusion servers. 1 Quiesce the Git Fusion system by setting the p4 key as a Helix admin user: p4 key git-fusion-prevent-new-sessions true 2 Wait until all other sessions of Git Fusion have stopped running. Check by running: p4 keys -e 'git-fusion-*-lock' This should return no results when all Git Fusion services have stopped. 3 Remove Git Fusion data from the Helix Versioning Engine and corresponding repos from the Git Fusion server: On the Git Fusion server, using the same Unix account that runs Git Fusion, run: p4gf_delete_repo.py # to delete one repo p4gf_delete_repo.py -a # to delete all repos 4a For existing Debian installations: Remove Git Fusion packages and their dependencies: sudo apt-get remove helix-git-fusion* 4b For existing RPM installations: Remove Git Fusion packages and their dependencies: yum remove helix-git-fusion* 4c For existing OVA installations: Shut down and remove the appliance. 4d For existing custom installations: This step applies to those installations which were done without the use of O/S Packages or the OVA. This includes scripted installations and those where each dependency was built from source. Delete the contents of your existing Git Fusion installation directory (e.g. /usr/local/git-fusion/bin or /opt/perforce/git-fusion/libexec). Delete the log configuration file (e.g. /etc/git-fusion.log.conf) and any log files. Delete the SSH key cron job (e.g. /etc/cron.d/perforce-git-fusion). Remove any dependencies which were built from source. 5 Remove the P4GF_HOME directory (e.g. ~git/.git-fusion) and the P4GF_ENV file (e.g. ~git/p4gf_environment.cfg). 6 Remove the Git Fusion Unix account (e.g. 'git'). 7 Repeat steps 3-6 for each Git Fusion server connected to your Helix Versioning Engine. License See bin/LICENSE for the license to Git Fusion's source code. Known Limitations and Behaviors * Git Fusion cannot copy pushed commits into Helix Versioning Engine if those commits modify Helix files if those files are locked by 'p4 lock' or exclusive open filetype +l. Do not use Helix file locks on files that Git users might also edit. If Git Fusion encounters a file that was locked after a 'git push' started, Git Fusion will unlock the file and submit Git content on top of the previously locked file. * If your Helix Versioning Engine is SSL-enabled, and you did not use --install option when installing Git Fusion submit triggers, insert "ssl:" before %serverport% for each trigger. For example: GF-pre-submit [snip] ssl:%serverport% * The web interface provided in the OVA for uploading SSH keys is limited in the supported encodings for user names. In particular, user names must be encoded as US-ASCII, otherwise an error message is displayed. The alternative is to use a Helix client to manage the SSH keys for users with non-ASCII characters in their user names. * On Windows Helix Verioning Engine, Git Fusion requires that all characters that can be interpreted by DOS be escaped properly when passed as arguments to the submit trigger script (p4gf_submit_trigger.py). Git LFS IMPORTANT NOTE: Git LFS 1.0.2 includes important bug fixes. Earlier versions not supported. Git Fusion includes support for Git LFS. Git LFS lets you store large files separately from the rest of Git data. To learn about Git LFS: https://git-lfs.github.com/ To configure a NEW Git Fusion repo for Git LFS: 1. Tell Git Fusion its own HTTPS URL. Do this once, in the global p4gf_config file: [perforce-to-git] http-url = https://mygfserver.company.com/{repo} 2. Enable in the repo's p4gf_config file: [@repo] git-lfs-enable = yes 3. Tell Git Fusion which files to manage via Git LFS: [@repo] git-lfs-initial-track = *.psd *.mp4 On each Git user's computer, download and install the Git LFS client software (do this once per Git user's computer): 4. Download and install the Git LFS client software from https://git-lfs.github.com/ 5. Configure Git to use LFS: git lfs init Clone the new Git Fusion repo: 6. git clone https://mygfserver.company.com/myrepo That's it. All the *.psd and *.mp4 files are now tiny "text pointer" files within the Git repo. When you 'git checkout', Git LFS downloads the files from Git Fusion and places their large original files in your Git workspace. To configure an EXISTING Git Fusion repo for Git LFS for future commits/changelists only: 1. Tell Git Fusion its own HTTPS URL. Do this once, in the global p4gf_config file: [perforce-to-git] http-url = https://mygfserver.company.com/{repo} 2. Enable in the repo's p4gf_config file: [@repo] git-lfs-enable = yes On each Git user's computer, download and install the Git LFS client software (do this once per Git user's computer): 3. Download and install the Git LFS client software from https://git-lfs.github.com/ 4. Configure Git to use LFS: git lfs init On one Git user's computer, configure Git LFS and start using it for large files: 5. git lfs track *.psd git lfs track *.mp4 git lfs add .gitattributes git commit git push Future Git commits and Perforce changelists will now use Git LFS to store large files. To convert an existing Git Fusion repo to use Git LFS for all changelists/commits: 1. Stop using the original repo. Push any remaining Git work through Git Fusion to Perforce. 2. Create a NEW repo, enabled for Git LFS. See "To configure a NEW Git Fusion repo for Git LFS" above. 3. Use the new repo. You can delete the old repo if it is no longer used. Git LFS Troubleshooting: * Asking for user/password over and over? The Git LFS client tends to ask for HTTPS user/password credentials over and over. This is annoying. You might want to configure your Git repo to cache these credentials locally: git config credential.helper cache git help credential-cache * Hanging? The Git LFS client hangs occasionally. It seems to be stuck asking for a user/password yet not actually prompting in a way that you can answer. CTRL+C and try again. * Seeing file content like this? version https://git-lfs.github.com/spec/v1 oid sha256:4b13fd2298318f70cf618c5ce3e155803b557db81535a48259aca66b7800f4c4 size 81846 That's a "text pointer": the tiny stub that Git LFS stores in the Git repo instead of the large file. If you see files like this after a 'git checkout', 'git clone', or other Git operation, then Git LFS failed to replace the "text pointer" with its original content for some reason. Try: * git lfs logs to see if Git LFS recorded anything. Perforce support will ask for these. * git lfs update and then try again. * rm git checkout -f HEAD -- * rm mv .git/lfs/objects .git/lfs/objects-old git checkout -f HEAD -- This step is particularly brutal. It resets Git LFS, clearing its cache and logs, forces Git LFS to re-fetch anything it needs from Git Fusion. If there's a problem somewhere, this step will probably produce a Git LFS error log. * Git LFS Extensions supported, but not recommended Git LFS includes support for "extensions" that can further modify file content before storing. These modifications occur on the Git user's computer, outside the view of Git Fusion or Perforce. Other Perforce users will be unable to see the original content that the Git user sees. * Scanning for LFS data slows Git Fusion conversion by ~10% for most repos. Enable only if you actually use it. Git Fusion's LFS support is not compatible with some Git Fusion features. Enabling Git LFS support disables these features: * fast push * push to create a Swarm review * Git copy/rename detection ------------------------------------------- Minor new functionality in 2017.1-patch1: #1502202 (Bug #90944) Improve trigger performance when updating user spec reviews #1495842 (Bug #90649) Batch 'print -k' calls when adding a new branch to a repo to avoid MaxScanRows limit. #1495005 (Bug #90647) Add --timeout option to git-upload-pack invocation to release stale processes #1490900 (Bug #90402) p4gf_submit_trigger.py --reset will now only remove the reviews whose changes have been successfully submitted. p4gf_submit_trigger.py --unset will remove all reviews #1486877 (Bug #90261) Add new configuration 'changelist-date-source to set the source of the Helix changelist date/time value from git commit. ------------------------------------------- Bugs fixed in 2017.1-patch1: #1506003 (Bug #91095) Do not delete object cache in read-only instance. #1489951 (Bug #86734) Improve automatic recovery of mirroring to reduce need for manual intervention after a failed push #1489684 (Bug #90337) Handle backslash in SSH keys for users with DOMAIN\user #1488025 (Bug #90319) Fix detection of closed Swarm reviews. #1487133 (Bug #90314) Improve p4gf_config validation of "non-fast-forward" push options to verify correct configurations are set ------------------------------------------- Minor new functionality in 2017.1: #1480821 (Bug #89997) Avoid attempting to checkout all possible branches. #1478230 (Bug #89814) Log git errors when failing to checkout "master" branch. #1477799 (Bug #89586) Git Fusion supports non-FastForward push. ------------------------------------------- Bugs fixed in 2017.1: #1483701 (Bug #90191) Overlapping inclusions in protections should be allowed. #1482871 (Bug #89783) Incomplete push results in ghost change "zero". #1477482 (Bug #89763) Unable to push/clone due to error: "client" invocation without special flag #1473519 (Bug #89681) Mirror indicates missing objects for deleted then resurrected repo. ------------------------------------------- Minor new functionality in 2016.3: #1471110 (Bug #88351) Start-at-change in stream mapping. #1466195 (Bug #89037) Auto-correct when re-cloning a repo with a missing P4 changelist. #1461739 (Bug #89101) The preflight-push doesn't contain %user% or %branch_name% so unable to see who tried to delete which branch. #1458136 (Bug #88930) Cache client specs to avoid excessive network calls. #1457617 (Bug #88957) Enable admins to lock out users from accessing Git Fusion. #1455991 (Bug #88964) Add Git Fusion admin group to permit new connections when the 'prevent-new-connections' key is set. #1454722 (Bug #88644) Eliminate p4 client creation for READ_ONLY instance. #1449445 (Bug #88770) Increase logging to include p4 command time at millisecond precision #1440610 (Bug #88365) Add a start point option to the p4gf_repo_size.py script. #1439534 (Bug #88474) Improve accuracy of p4gf_repo_size.py. #1436058 (Bug #88328) Lock down p4gf_config2 files with protections. #1427778 (Bug #87972) Script to fix missing cached commits and trees. #1424346 (Bug #87792) Provide configurable to disable fixing ktext files. #1418742 (Bug #87835) Tool to extract a single commit or tree object from git packfile. #1417613 (Bug #87738) Create p4gf_commit_query.py changelist/commit queries. #1417010 (Bug #78109) If stream path type is import+, mark submodule repo not read-only. #1413372 (Bug #87330) Allow P4 ticket when running configure-git-fusion.sh script. #1408333 (Bug #87155) Permit case-insensitive p4d when running configure-git-fusion.sh script. #1408296 (Bug #87280) Add option to ignore file permissions in the configure-git-fusion.sh script. #1400480 (Bug #86847) Configurable to prevent users from deleting remote branches. #1400480 (Bug #86959) Add variable %git-action% for preflight hook scripts. ------------------------------------------- Bugs fixed in 2016.3: #1470117 (Bug #89216) Unable to connect Git-Fusion 16.3 to unicode enabled p4d 16.1. #1469482 (Bug #89223) Configure script should not use -P option at security level 3. #1469444 (Bug #89081) p4gf_config2 protections do not account for groups. #1466195 (Bug #89199) Push failure on repo, two cached commits pointing to same changelist. #1464626 (Bug #87334) Lock directories and files created and never removed for repos that do not exist. #1462511 (Bug #89043) Include -h option in p4gf_rollback to avoid scanning have table. #1458945 (Bug #89057) Checking out "master" branch must break after first success. #1455540 (Bug #88966) Mirror status key values may have common prefixes. #1453511 (Bug #88890) Skip mirror recovery for read-only instance. #1453466 (Bug #88889) Simultaneous temp client deletes may result in error. #1450581 (Bug #88797) Lock delays and timeouts due to flawed lock state management. #1443656 (Bug #88573) Fetch on read-only instance takes p4key lock. #1443503 (Bug #87679) Unable to delete repo due to non-existent .gitmodules file #1437135 (Bug #84869) Allow reviews in repo without "..." in view mapping. #1436613 (Bug #84935) @wait processes over SSH continue to hang even if user CTRL+C #1432540 (Bug #87799) Severed history with two overlapping repos and intervening p4 changes. #1418714 (Bug #87833) Setting global config on every access occasionally leads to errors. #1414212 (Bug #87686) AttributeError: 'Branch' object has no attribute 'any_changes' #1406468 (Bug #86931) p4gf_submit_trigger.py: p4gf_config validation should detect illegal characters in the Git branch name. #1398685 (Bug #87018) Repo initialization syncs all trees. #1398244 (Bug #86853) Swarm Reviews are incorrectly using P4 revision=#none for basis of shelf. ------------------------------------------- Minor new functionality in 2016.2: #1396780 (Bug #83736) Request changelist description to include helix server id. #1396042 (Bug #85236) Record Matrix2's decision making steps at info level. #1395508 (Bug #84060) Assert lock liveness thoroughly for file-based locks. #1393657 (Bug #86944) Disable Git Fusion by server and/or repo. #1393049 (Bug #78377) Utility to clear all stale locks on a repo. #1393044 (Bug #85958) Include Git commit dates in changelist description in human readable format. #1392795 (Bug #81445) Jobs lookup to be more accommodative. #1392502 (Bug #85750) Clean up deleted repo locks dir folders/files. #1390753 (Bug #85110) Git repo clone from a depot path does not support the space in the path. #1390216 (Bug #86680) Teach Git Fusion to disable a repo, rather than the entire instance. #1387396 (Bug #86457) Avoid creating empty non-existent dirs on GF host in .git-fusion/views area #1387102 (Bug #85364) Requesting more descriptive message when a push fails. If push fails due to protections violation, display the files that violated the permissions. #1382398 (Bug #86386) Request to add the user to the p4gf_lock_status.py. ------------------------------------------- Bugs fixed in 2016.2: #1397245 (Bug #86966) Error: 'NoneType' object has no attribute 'p4_request' #1392646 (Bug #86756) Temp client deletion pattern matches too many clients. #1388673 (Bug #85916) Repos are now unable to be cloned if they have a stream with isolate path #1388011 (Bug #86511) Missing object cache commits for branch HEAD should not cause copy_to_git to start @1. #1386693 (Bug #86479) p4gf_g2p_matrix2.py format() double-call bug #1384408 (Bug #86475) Mistaken logging call causes misleading exception. ------------------------------------------- Major new functionality in 2016.1: #1374685 (Bug #85108) Git Fusion: Refine package install and config script output. Minor new functionality in 2016.1: #1380371 (Bug #78636) Provide a command to get sha1<->changelist from git #1376215 (Bug #85873) Configure HTTPS even if Apache is already installed. #1370282 (Bug #80853) add a 'repack', or probably better yet 'git gc' #1361195 (Bug #85384) Improve performance in atomic_lock for repos with thousands of LW branch defs. #1360686 (Bug #85406) Re-visit "Imported from Git" string usage. GF uses this string for its own purposes. #1357330 (Bug #84671) Unable to install Apache if user is other than git for the installation or if home directory set different from /opt/perforce /git-fusion/home/perforce-git-fusion, such as when installing GitSwarm and Git Fusion on same server. #1348731 (Bug #83771) Allow reuse of fully-populated depot branch location to hold a new Git branch's contents. #1339227 (Bug #80281) Add an option to p4gf_poll.py to report the names of the repos that it is updating. #1333673 (Bug #83911) Fast Reclone from gitmirror #1323134 (Bug #72133) Provide a means to purge all unreferenced objects for the Git Fusion depot which have been left as a result of p4gf_delete_repo usage. This would be a garbage collection process independent of the deletion of any given repository. #1323134 (Bug #75271) Add p4gf_gc script to obliterate unreachable Git Fusion object cache files. #1321920 (Bug #78745) Allow P4CONFIG in p4gf_environment.cfg. #1312925 (Bug #73458) Config option to check sha1 and only 'p4 edit' files that actually need it. #1307821 (Bug #83703) Explain p4gf_submit_trigger.py error with [git-to-perforce] in 'p4gf_config' ------------------------------------------- Bugs fixed in 2016.1: #1380701 (Bug #86325) Eliminate the use of last-seen-changelist which can cause unwanted ghosts commits. #1378752 (Bug #85462) Unable to create swarm review for a stream-based repo #1377043 (Bug #86049) Failed p4 submit causes next push to delete all files in branch. #1375129 (Bug #85828) Automatically clean up old temporary object clients. #1371173 (Bug #87374) Lock status output is unclear in stating process is running and dead. #1370710 (Bug #85583) Protections check bypassed by clever merging. #1370033 (Bug #76221) OVA Upload Public Key File disallow "@" in the keyname #1368156 (Bug #85687) p4gf_rollback.py: Clarify the --obliterate flag example messaging. #1367047 (Bug #85774) Security: update git package to at least version 2.7.4. #1366955 (Bug #85498) Request Git Fusion use git cherry-pick instead of merge for integrations as described in the attached reproduction. #1365431 (Bug #85658) Unexpected/undetected Perforce change causes ghost commit created. #1360713 (Bug #85379) No ticket for git-fusion-review--all-gf causes PtoG to revert head changes from fast-import. #1348731 (Bug #84988) Changes on new branch mapping not processed. #1333145 (Bug #84647) P4 changelist never processed. #1323227 (Bug #84069) configure-git-fusion.sh chown fails #1321202 (Bug #80994) Modify configure-git-fusion.sh, so that it does not set up Git Fusion against any replica, unless the user agrees to configure it in read- only mode #1314728 (Bug #83772) Git Fusion must not sever history on pull if some parent commits do not overlap repo. #1311901 (Bug #83882) @list does not check if user exists or not. #1310864 (Bug #83957) "git-pack-objects died with error" when fetch/pull/cloning. #1307508 (Bug #83783) Git Fusion fails to report if server is unicode enabled with p4gf_version.py ------------------------------------------- Major new functionality in 2015.4: #1242582 (Bug #79606) Support Git LFS: Large File Storage. Minor new functionality in 2015.4: #1247994 (Bug #81202) Changelist guardrail for p4gf_rollback.py: prohibit rollback to "push- state: incomplete" changelist. #1246740 (Bug #81247) Accelerate 'git fetch/pull' operations when there is nothing new to copy from Perforce to Git. #1245643 (Bug #75328) Additional logging in p4gf_util.py in _open_new(). #1243821 (Bug #80050) Detect and give a more descriptive error message for attempting an ad- hoc clone on a Perforce path that's already part of a pre-defined repo. #1241449 (Bug #79218) Retire the persistent per-repo client. Consume one fewer client. #1238606 (Bug #80386) Configure-git-fusion.sh should set LC_ALL and LANG for all SSH and HTTPS Git Fusion connections. #1236739 (Bug #80731) LFS: set .git/info/attribute overrides to prevent .gitattributes interference. Better fix for GF-2481/job079540 "eol=lf" binary file corruption. #1234247 (Bug #80569) p4gf_lock_status.py now detects when a push was killed because we ran out of memory. #1233878 (Bug #79144) p4gf_lock_status.py now reports user reviews. #1233736 (Bug #80588) Provide script to estimate what a copy from Perforce to Git will generate both for Git and for Perforce. #1226903 (Bug #80417) Improve performance with large number of branches. ------------------------------------------- Bugs fixed in 2015.4: #1253392 (Bug #81387) preflight-commit-require-job.py fix usage comment. #1248900 (Bug #81192) p4gf_rollback.py gets repo into bad state. #1248093 (Bug #81289) Quotes in path crash git-fast-import: //depot/"dir/file".png. #1246675 (Bug #80655) If the hostname of the Git Fusion instance matches an existing depot name, then configure-git-fusion.sh (p4gf_super_init.py) will fail with a message about the 'hostname' being a depot. #1243797 (Bug #81107) Lock status script should detect broken locks. #1241801 (Bug #80933) Prevent users from running configure-git-fusion.sh pointing to a new p4port or to change server id if Git Fusion has been populated. #1239777 (Bug #80932) Prevent users from changing the p4port through the OVA management UI. Require configure-git-fusion.sh script to change p4port. #1237152 (Bug #80786) A change to the 2015.3 p4gf_submit_trigger.py script breaks the trigger on Windows servers. #1235785 (Bug #80789) Leading spaces before [section] headers in p4gf_config cause submit trigger to fail on --rebuild-all-gf-reviews. #1235755 (Bug #80587) Chunk up changes being submitted to Perforce during copy from Perforce to Git. #1233478 (Bug #80719) Ellipsis and smart quotes cause strange errors. ------------------------------------------- Minor new functionality in 2015.3: #1221756 (Bug #80278) Add --verify option to configure-git-fusion.sh. Replace 'super_init' in GF messages with 'configure-git-fusion.sh.' #1219795 (Bug #77828) Add helper scripts for http authentication. Add prompt in configure- git-fusion.sh. #1211521 (Bug #79107) p4gf_submit_trigger.py --reset --review-user git-fusion-reviews - allow admin to specify the reviews user you want to reset with new --review-user . #1211468 (Bug #79998) Config validator: report line numbers. #1206408 (Bug #79511) Configure_git_fusion.sh should install triggers locally when it detects P4D to be local. ------------------------------------------- Bugs fixed in 2015.3: #1219718 (Bug #80096) configure-git-fusion.sh: Accept $ in password. #1215941 (Bug #80091) enable-clone-to-create-repo fails if read-permission-check = user. #1214519 (Bug #80011) p4gf_config_validator.py must permit trailing ... without a preceding /, such as //depot/name... name... #1210248 (Bug #78659) Update P4PORT in AddExternalAuth. #1207821 (Bug #79795) UTF-8 characters in repo names not displaying in @list command over http/s. #1207077 (Bug #79879) Ensure uniqueness of client created in read_permission_check_for_repo(). #1206406 (Bug #78765) configure-git-fusion.sh (p4gf_super_init.py) does not work well with with external authentication triggers (auth-check). (service-check?) ------------------------------------------- Major new functionality in 2015.2: #1068275 (Bug #72258) Improve support for case-insensitive Perforce servers. #1061143 (Bug #75536) Fast Convert of initial 'git push'. Use new P4D 15.1 'p4 unzip' command to greatly accelerate initial push of large repos. #1059078 (Bug #77844) Upgrade to, and require, pygit2 0.22.0 and libgit2 0.22.0. Minor new functionality in 2015.2: #1127998 (Bug #79274) Add optional logging to the Git Fusion triggers #1073588 (Bug #78486) Ensure process ID appears in the log format string. #1071877 (Bug #78856) Add two new triggers for 15.1+ p4d to serialize DVCS/Git Fusion pushes #1069979 (Bug #79129) Detect and remove stale locks automatically. #1067744 (Bug #78264) Support for Cluster Environment #1062778 (Bug #78579) Accept backslash in Perforce userid with HTTP. #1042069 (Bug #78335) Report depot path as error when protections rejected. #1042068 (Bug #77042) direct logging from p4gf_auth_update_authorized_keys elsewhere #1041067 (Bug #77354) Add the predefined AUDIT log format needed for IP Threat analysis to the system - make it easy to generate the correct log, if audit log is turned on. If possible the configure script can detect that audit logging is enabled on the main server and suggest enabling it on the git fusion instance. #1036012 (Bug #77353) Modify configure-git-fusion script to ask user to check for updates and send system information to Perforce. #1033086 (Bug #78076) Allow git-fusion-user to run all Git Fusion admin scripts. #1025704 (Bug #77707) Global config validator should not allow grossly invalid values #1020171 (Bug #77059) New config setting to allow read-only repo to never updated by 'git fetch'. Update only by p4gf_poll.py. #1019771 (Bug #67270) Add support for read-only Git Fusion server to support read-from Edge write-to Commit configurations. This can support other uses as well. #1019771 (Bug #76207) Add a Git Fusion instance config to limit all Git access to fetch. Effectively makes this instance read-only. This helps distributed sites which fetch from the local Git Fusion and push to the one located next to their commit server. ------------------------------------------- Bugs fixed in 2015.2: #1209531 (Bug #79907) Enabling depot-branch-creation-enable = all breaks swarm reviews. #1209531 (Bug #79954) Exception in _find_first_nondeleted_branch when config file branch sections are not all lowercase. Git Fusion fails if the branch keys are mixed case when connecting to case-insensitve p4d. #1204653 (Bug #79767) CTRL+Ced push must not leave Git refs advanced ahead of what's in Perforce #1203018 (Bug #79746) Avoid race condition between 'git push' and 'p4 submit'. #1198654 (Bug #79344) Git Fusion should recover from a ctrl+c'ed push situation when pre- receive hook runs, git updates HEAD, but post-receive hook never ran #1127599 (Bug #79394) Repo refactoring: must not fail with non-fast-forward during pull #1068212 (Bug #79025) Install trigger/Configure should error out if 'triggers.io=1' #1064887 (Bug #78528) Improve documentation for "depot-branch-creation-enable = explicit" and {git_branch_name}. #1059610 (Bug #81194) p4gf_rollback tries to delete wrong key. #1059437 (Bug #77633) Strip "Copied from Perforce" when pushing. #1058091 (Bug #79095) p4gf_p4file.string_from_print() must use p4gf_char.decode() for unicode conversion. #1056952 (Bug #78474) Git-Fusion rejects tags that reference commits that don't appear under any branch its aware of. It will now ignore such tags. #1056675 (Bug #78758) NoneType in config validator. #1055260 (Bug #78626) Pull failure must release all locks. #1053296 (Bug #78683) Mirror fails to submit files if pushing exactly 1000 commits. #1041153 (Bug #78295) Audit log lists useless information for non-actions #1036407 (Bug #78129) p4gf_rollback.py: Background process for running external commands should be started sooner rather than later. p4gf_rollback.py should call p4gf_proc.init() early on. Avoid unnecessary WARNING and ERROR messages due to this. #1036407 (Bug #78224) Preview p4gf_rollback.py should issue INFO instead of WARNING / ERROR messages. #1036150 (Bug #78259) Report permissions issue properly in p4gf_init.py script. #1034927 (Bug #78166) Calls to 'p4 protects -h clientIP' must take into account proxy/broker/edge use. #1030432 (Bug #77888) p4gf_server_init.py: set AuthMethod to 'perforce'. #1028445 (Bug #77876) HTTP AUTH should not validate 'service' users #1022461 (Bug #71552) Permit push of Swarm review to branch even if push to branch prohibited. #1022007 (Bug #77663) Do not use unknown_git as author if a better match for author exists. #1018033 (Bug #77623) 'git clone' must include deleted branches if they contribute to undeleted history. Do not fail with "Failed to traverse parents of commit" ------------------------------------------- Major new functionality in 2015.1: #990901 (Bug #63775) Git Fusion should translate Git copy and rename detection into Perforce copy, move/add, and move/delete. This translation is configurable per repo. See p4gf_config.global.txt or documentation on perforce.com for new config options "enable-git-find-copies" and "enable-git-find-renames" that enable Git copy/rename detection and translate that to Perforce copy/move actions. Enabling Git's copy/rename detection can greatly slow 'git push' operations, especially for large initial pushes. #989869 (Bug #76673) Upgrade to Git 2.2.1 and configure repos to reject attempted exploits of CVE-2014-9390. Git Fusion now configures Git to run 'git fsck' on pushed repos and reject malformed or malicious commits. Refuse to host repos that might exploit this bug on Windows or Mac OS X workstations, even though the Git Fusion linux server itself is immune. #982704 (Bug #73216) Backround push: unify https and ssh behavior so that 'git push' returns as soon as Git Fusion accepts the push. Translation from Git to Perforce occurs in a background process. Minor new functionality in 2015.1: #1100315 (Bug #78172) Tool to track down locks #1011396 (Bug #77268) Enable concurrent fetch operations against the same repo across all Git Fusion instances. Push operations limit read access only on the specific Git Fusion instance performing the push. #1004374 (Bug #74902) Permit 'p4 delete' instead of 'p4 obliterate' of //.git- fusion/.../commits/... #1001122 (Bug #71659) Add config option to permit/prohibit new repo creation via 'git clone'. #991582 (Bug #76266) Configurable audit log output. #985841 (Bug #75229) Customer-supplied hooks to automatically create repos based on URL pattern. #984063 (Bug #75224) Git Fusion should automatically clear git-config pack settings and repack its repos. #982583 (Bug #71471) Git Fusion should provide a configurable to enable swarm reviews independent of enable-git-branch-creation. #981293 (Bug #71983) Git Fusion should report acurately if configure-git-fusion.sh fails setting the passwd in p4gf_super_init, such as in an LDAP environment. #979729 (Bug #76267) Git Fusion should support the configuration of p4gf_submit_trigger.cfg's location. #974376 (Bug #75227) Shallow Git-to-Perforce: push just the HEAD of branch to populate a new repo. Git Fusion has always been able to do this. This job just records the Git incantation to do so. #956240 (Bug #71246) OVA install now includes nano editor for folks who would rather avoid vi. #952872 (Bug #73114) OVA apt-get upgrade: easier upgrade process for OVA users. ------------------------------------------- Bugs fixed in 2015.1: #1172402 (Bug #79540) Avoid binary file corruption if .gitattributes specifies eol=lf. Ignore .gitattributes when copying files from Perforce to Git. #1073338 (Bug #78829) 'git clone' of a UTF-8 encoded path must work. #1067276 (Bug #75066) Get "Error decoding file path" on a particular file name with a spanish accented 'o'. Try latin-1 for paths not encoded in UTF-8. #1005303 (Bug #77264) Submit trigger ignores path to p4 in p4gf_submit_trigger.cfg. #992660 (Bug #77080) edits of pushed files causes verbose logging to crash #990280 (Bug #77021) Logging of matrix with invalid cell data blows up push. #982874 (Bug #76772) Exception in p4gf_push_limits.py --all if repo temp clients present. #978146 (Bug #76228) Git Fusion must not incorrectly reject read permissions. When checking read permissions, do not pass read permissions through MapAPI. #975246 (Bug #76473) utf16 files from Perforce and modified in Git must be stored as binary. #974341 (Bug #76309) Prohibit 'git push' by non-existent Perforce users. #963835 (Bug #75615) Support IP-based protection table rules. #961025 (Bug #75628) HTTP/1.1 404 Not Found for extension commands breaks customer scripts that used to work for GF/2014.1. #958769 (Bug #76079) p4gf_poll.py closes connections after first repo. #952411 (Bug #75699) p4gf_submit_trigger: Do not add duplicate Reviews entries to git- fusion-reviews--all-gf. ------------------------------------------- Major new functionality in 2014.2: #892350 (Bug #73496) Git users can now create fully populated branches that they can share with Perforce users. #875977 (Bug #69317) Improve record keeping in lightweight branches by inserting Perforce- only branch management changelists that are not copied to Git. Minor new functionality in 2014.2: #946216 (Bug #72044) Report error if branch view maps multiple lines to same Git path. #938931 (Bug #75121) p4gf_submit_trigger.py --reset must support P4D 14.2's new AuthMethod field in user spec. #938315 (Bug #66526) When matching by email addresses, addresses with subdomains (bob@hq.company.com) or hosts (bob@dhcp-host.hq.company.com) should match addresses without (bob@company.com). #902646 (Bug #70971) @list should also test protections to check if user can push/pull. #902545 (Bug #70997) Revisit performance with git objects "packed" vs. 'unpacked". New Git Fusion repos will now default to packed, which almost always performs better overall. To see this boost for existing repos, clear git config gc.auto, gc.autopacklimit, and receive.autogc. Then 'git repack'. #902545 (Bug #72335) Optimize Disk Space Usage: turn on Git packing. #894192 (Bug #73024) Git users can now push to delete branches defined in p4gf_config. #891075 (Bug #73376) Clean up opened files in temp clients after failed push. #891019 (Bug #70918) Convert stream imports into Git submodules. #890938 (Bug #71563) Don't use canonical path in pre-receive hook. #890703 (Bug #72374) Improve performance of read-only branches. #890359 (Bug #70972) Customized P4GF_DEPOT per installed P4GF on same machine. #885464 (Bug #72642) Add an easy way to set P4TICKETS location in the p4g4_submit_trigger.py script. #882932 (Bug #73459) Configuration option to detect JIRA or other job numbers in commit descriptions. In addition to detecting job numbers in "Jobs: job01234", accept JIRA issue numbers "Jobs: GF-4321" #881152 (Bug #73172) Remove dependency on Git 1.8.2.3. Support Git version 1.7.9.5+ on the Git Fusion server. Git client support unchanged: all modern versions supported. #872841 (Bug #73146) Support the cloning of URLs with the .git suffix. #870106 (Bug #71485) Support multiple pre-flight submit triggers. #863549 (Bug #66529) Append Perforce changelist number to Git commit message. Only works for chagelists that originate from Perforce. Commit messages for commits from Git remain unchanged. #862393 (Bug #72719) Configuration option to use Git author name (user.name) for Perforce user lookup. #862393 (Bug #73005) Configuration option to use account portion of Git author email for Perforce user account lookup. #860112 (Bug #72567) p4gf_delete_repo.py: Add a test to detect when both '-a' and a view are provided as arguments and generate an error. This will clarify command-line usage and prevent customers from unintentially obliterating all repos on a servers. ------------------------------------------- Bugs fixed in 2014.2: #949010 (Bug #75508) 'p4 submit' to files in a Git Fusion repo must be prevented during a push of that repo. #949010 (Bug #75704) Use a shared lock for all access to the Git Fusion Reviews users. Avoid race conditions by using a shared key lock for updates to Git Fusion and non-gf Reviews users. #948504 (Bug #75448) Non-tag file in tag change causes failure. #946371 (Bug #75510) Do not crash with NoneType in _git_diff_tree if one of the input sha1s is None. #946371 (Bug #75511) Do not crash with bad object in _git_diff_tree if one of the two input sha1s does not exist in the repo. #946370 (Bug #75513) Push failure logs must not be truncated or unzipped. #946152 (Bug #75517) Do not delete all files in a ghost changelist. #945236 (Bug #75509) Do not delete all files upon non-ff-push. #936914 (Bug #74126) p4gf_usermap must disallow mapping to git-fusion-user. #935593 (Bug #74085) Read-only paths incorrectly detected. Pushing multiple lightweight branches to a repo where the master is a stream causes the push to fail with "Paths that overlap multiple Git Fusion branches are read- only." #935516 (Bug #75168) configure-git-fusion.sh must support case-insensitive P4D. #935400 (Bug #75139) 'git push' must not fail submit with "Some file(s) could not be transferred from client." due to client SubmitOptions: leaveunchanged. #935349 (Bug #74141) Profiling output repressed when using HTTP. #912948 (Bug #72563) Modify documentation for p4gf_delete_repo.py '-a' and 'y' flags: Perforce 2014.1: Git Fusion Guide, script command reference section. #899197 (Bug #71708) Avoid "list index out of range" error in p4gf_super_init.py. #896875 (Bug #74049) Git Fusion code that expects a spec or Python dict must not fail when a trigger prints text to STDERR or STDOUT. #896601 (Bug #73741) Push fails due to non-git-fusion form-out trigger printing a message to STDOUT. #896493 (Bug #73384) P4TRUST environment variable missing from OVA web page code. #896149 (Bug #73317) Cancelled HTTP push can leave Git Fusion in a bad state. #894989 (Bug #73623) The python3.3 processes tied to p4gf_http_server.py are hanging around. #893878 (Bug #73403) p4gf_poll.py is not usable from cron. Busy and error conditions cause it to stack up stale poll processes. #890938 (Bug #73554) Upgrade scripts must update Git hooks to point to correct version of Git Fusion. #885498 (Bug #73138) 'NoneType' object has no attribute 'sha1' #881220 (Bug #73414) Two trigger failures: list index out of range in change-commit trigger, and counter does not exist on delete-counter in change-commit trigger #878324 (Bug #73134) enable-git-branch-creation = no not working as expected. Must reject push of merge commit from task branch when first-parent was previously pushed. #877611 (Bug #73347) Missing content under //.git-fusion/branch-info/... causes failure of p4gf_init_repo. #862991 (Bug #73063) Simultaneous pushes via http to same repo produce Git "error: failed to lock ..." ------------------------------------------- Major new functionality in 2014.1: #804605 (Bug #71544) Git Fusion OVA now supports Git over HTTPS. Uses Apache. Minor new functionality in 2014.1: #825458 (Bug #70464) Email address comparison should be case-insensitive for the domain. #825458 (Bug #70600) Ignore case when matching perforce and Git users - add configurable. #823119 (Bug #71470) Document which config settings must be enabled for Git Swarm. #818799 (Bug #71551) Configure branches and/or repos for read-only access. #816059 (Bug #69926) Allow setting ignore-author-permissions globally #812465 (Bug #69432) Make audit log location configurable. #811587 (Bug #71660) Avoid 'p4 resolve' failure when merging text to symlink if text starts with newline. #811433 (Bug #68298) Improve performance of p4gf_delete_repo. #801447 (Bug #71714) Better help for classic vs. streams view discrepancies. #796885 (Bug #71553) No longer require pusher/author write protects for //.git- fusion/branches/... #788258 (Bug #70249) If environment variable P4GF_ENV is set, load Git Fusion environment from file pointed to by P4GF_ENV, overriding inherited process environment. #781134 (Bug #71141) OVA must not wait forever for "Getting latest $RELEASE from ftp.perforce.com." Timeout after 15 seconds. #780988 (Bug #71134) Make all GF repo objects readable by other. #767162 (Bug #70558) Support L10N in Python Scripts. ------------------------------------------- Bugs fixed in 2014.1: #856794 (Bug #72456) Contents of parent commit not merged into mapped branch. #855862 (Bug #72865) p4gf_submit_trigger.py --rebuild-all-gf-reviews does not update reviews if the repo uses streams. get_repo_views() ignores them and only gets non-stream "view" paths. #852048 (Bug #72886) 'git push' must not insert extra backslashes in file paths that contain backslashes. #851848 (Bug #72790) Correctly rebuild Git file hierarchy on re-repo when original Git parent commit was submitted to a different Perforce depot branch. #851824 (Bug #72792) Avoid redundant or re-ordered parents on re-repo. #844298 (Bug #72757) Do not unnecessarily branch every file into a new lightweight branch. #842540 (Bug #72732) @list special command only shows repos containing the server-id. #839793 (Bug #72643) Do not delete files or directories if another file path is very long and ends with exactly the same string as the doomed file's/directory's full path. #839085 (Bug #72663) Correctly set file +x mode for files opened during a 'p4 integrate'. #838852 (Bug #72637) 2014.1 p4gf_delete_repo cannot delete repos created before 2014.1. #835477 (Bug #72439) Push does not go through due to [Error]: "Only one storage modifier +C +D +F or +S allowed on 'text+FxC'". #830952 (Bug #72382) Catch edge case where enable-git-branch-creation=no still creates branch in Perforce. #823046 (Bug #72276) Make sure the pre-receive hook is set with Git Fusion session. #822218 (Bug #71811) Do not let case conflicts cause a crash with 'NoneType' object has no attribute 'p4_request' Instead, reject any 'git push' where case conflicts can cause such a crash. #821111 (Bug #72215) Submit trigger failed if user had password changed. #813321 (Bug #71951) p4gf_submit_trigger.py performance issue when removing Reviews. #797632 (Bug #70855) Deleted remote branches with/funny/names are reconstituted on fetch/pull. #785910 (Bug #71094) Apply submit-trigger cleanup code only to changelists safe to clean up. #783288 (Bug #71089) Avoid hitting MaxScanRows during p4 fstat. #782896 (Bug #71126) Permit push to classic depot when stream branch also exists. #782496 (Bug #71007) Report MaxScanRows error correctly, not "Change already submitted." #778448 (Bug #70920) Permit "/" in repo path under HTTP. #777412 (Bug #70931) Ignore trailing CR and other whitespace when parsing changelist description DescInfo values. #776142 (Bug #70394) Do not leave several abandoned p4 connections or p4d processes running during long-duration 'git push'. ------------------------------------------- Major new functionality in 2013.3: #748067 (Bug #60237) Support Steams depots and stream clients #727555 (Bug #68972) Support submodules. #719837 (Bug #69284) Git Swarm: Push work from Git to Swarm for pre-submit review. Minor new functionality in 2013.3: #757228 (Bug #60330) Git Fusion should respect 'read' permissions in the protections table on pull or clone. #721967 (Bug #68373) p4gf_submit_trigger_26.py supports P4TICKETS. ------------------------------------------- Bugs fixed in 2013.3: #797632 (Bug #70441) Deleted lightweight branches must not resurrect on their own. #776468 (Bug #70898) Install missing py and Zoneinfo files in Perforce delivered pytz RPM package. #753352 (Bug #69820) Avoid 'p4 verify' checksum BAD! errors in ktext files due to Git Fusion's change to $Author$. #745170 (Bug #69892) Use raw encoding when printing depot branch-info files. #724411 (Bug #69440) OVA Web UI must not crash in keylist.py due to umlaut in WinAnsi encoding. ------------------------------------------- Major new functionality in 2013.2: #707420 (Bug #68690) preflight-commit hook allows custom 'git push' rejection, policy enforcement, similar to Perforce server change-submit or form-in triggers. #706359 (Bug #56838) Allow system to work with HTTP as the transfer protocol. #704306 (Bug #56952) Support 'git push --tags'. Only tags of commit objects will be stored within Perforce. Minor new functionality in 2013.2: #717910 (Bug #69117) Include depot path in debug log when checking authorization in ProtectsChecker. #707420 (Bug #75228) Preflight Hook calls change-xxx triggers directly ------------------------------------------- Bugs fixed in 2013.2: #735557 (Bug #69653) After deleting a branch definition from p4gf_config2, 'git push' must not fail with error message: 'NoneType' object has no attribute 'find_depot_branch'. #729018 (Bug #69538) Correctly handle UTF16 file/path names which contain wildcard and/or other characters that are escaped in Perforce. #714291 (Bug #68993) Bug discovered during reworking the trigger for 13.3. Call to 'p4 unlock -c changelist' after a failed push requires that git-fusion- user admin's privileges engage the -f option. #706248 (Bug #68409) Attach jobs during 'p4 submit', not after with 'p4 change -f'. Support change-submit triggers that require attached jobs. ------------------------------------------- Major new functionality in 2013.1: #600732 (Bug #57010) Support symlinks. #595402 (Bug #62598) Bidirectional branch translation between Git and Perforce. #576055 (Bug #58740) Support Unicode and other character sets. Specify P4CHARSET in p4gf_config file. #575498 (Bug #61762) Atomic Push: Do not let conflicting changelists, open files, or locked files cause a 'git push' of multiple commits to fail partway through. Minor new functionality in 2013.1: #690538 (Bug #67225) Check the content of p4gf_usermap for correct formatting. #680014 (Bug #67574) Exclude //.git-fusion/objects/... from filter_path check of permissions. #675651 (Bug #60779) Fail with error if git is not in path or not executable. #665101 (Bug #62783) Support changing P4GF_DIR. #665101 (Bug #66961) Support changing P4GF_DEPOT. #664889 (Bug #66528) Allow merges if enable-branch-creation=no. #664654 (Bug #62673) Allow the pusher to be the changelist owner when the author does not have a Perforce license. #663195 (Bug #66314) Allow the '/' in repo names. This would allow Perforce admins to create an environment that is more consistent with their existing Git environments (i.e. Git-like or HTTP-like URLs). #662464 (Bug #66325) p4gf_submit_trigger fails if 'p4' not in path. #648016 (Bug #62528) p4gf_poll.py: cron job tool to update / pre-cache Git Fusion server with on-going changes. #646157 (Bug #62782) Support using a symlink to replace ~/.git-fusion/ with a symlink to another filesystem #632237 (Bug #60336) Enforce IP-based access control rules for Git Fusion. #609169 (Bug #64539) Logging: add DEBUG2 and DEBUG3 logging levels. #607924 (Bug #63159) Prevent branch view definitions with different right-hand-sides. Conflicting right-hand-sides can lead to "File(s) not in client view" unpushable files. #607177 (Bug #62672) Provide an option to only consider the pusher's protections and avoid permission escalation. Don't check permissions on a push for the author and committer. #607176 (Bug #63599) OVA: Remove unsupported "Update" tab. #604962 (Bug #63606) Git Fusion server ID no longer changes as hostname changes. p4gf_super_init.py now stores server ID in ~/.git-fusion/server-id #595402 (Bug #62726) p4gf_delete_repo.py --no-obliterate skips 'p4 obliterate' commands. p4gf_delete_repo.py --gc runs deferred 'p4 obliterate' commands. #578266 (Bug #62580) p4gf_init_repo.py must check and fail with error if p4gf_super_init.py not yet run. #578038 (Bug #62648) Git Fusion must use push date, not author date for P4 changelist date. Git dates remain unchanged. #575498 (Bug #61763) p4gf_super_init.py must create per-Git-Fusion-server Perforce service user. #575313 (Bug #61846) Git Fusion must check for required P4Python version. #571558 (Bug #62385) Git Fusion must not double-compress Git object files when storing in Perforce. Use filetype 'binary+F', not 'binary', for files stored in //.git-fusion/objects/... #563068 (Bug #62071) Git Fusion must return a message of the day upon any interaction. Print contents of ~/.git-fusion/motd.txt if exists on Git Fusion server. #561096 (Bug #61893) Git Fusion must wait forever, not time out and return, when waiting to acquire a lock. #560515 (Bug #56929) 'git push' with Jobs: in description associates P4 jobs with changelist. #560515 (Bug #59909) Move cache clean-up from 'git push' to 'delete repo' time. Improves 'git push' performance. #560515 (Bug #61638) @info must include P4Python version line. #560515 (Bug #61639) p4gf_init_repo.py must perform initial clone, even if no --start specified. #559725 (Bug #61688) Allow simultaneous pulls of same views. ------------------------------------------- Bugs fixed in 2013.1: #687693 (Bug #67873) Avoid custom change-submit triggers rejecting empty changelist descriptions. Git Fusion's initial 'p4 submit' must include original Git commit message, not a placeholder to be replaced later. #687601 (Bug #67925) Guard against duplicate branch IDs in branch definitions. #687554 (Bug #66913) Use case-insensitive comparisons for p4user column of p4gf_usermap if P4D server is case-insensitive. #687505 (Bug #67095) p4gf_delete_repo.py must delete permission groups and client even if client view is empty. #682212 (Bug #67694) Push of unmapped branch fails with exclusionary mappings. #680263 (Bug #67573) Set ignore_author_perm to yes, do not create unknown_git if change_author = author, then fail on unknown users if change_author = pusher, then pass on unknown users (currently fails). #678077 (Bug #67549) Data loss if multiple git branches share depot branch. #674852 (Bug #67398) Push fails if TMP on another filesystem. #672810 (Bug #67382) Push fails with changes on excluded path. #672274 (Bug #66527) Avoid wide open paths. #662527 (Bug #66087) Support unusual client names if valid. #655207 (Bug #66285) p4gf_submit_trigger_26.py must account for extraTags. #653065 (Bug #66653) Avoid creating lightweight branch views or paths with two slashes (//). #650795 (Bug #66486) Client view with exclusionary mappings causes p4 reviews in p4gf_atomic_lock to fail. #648147 (Bug #66391) git push: RCS keyword expansion: when 1 file changed, do not add all files to changelist. #629349 (Bug #65665) Multiple SSH2 keys causes error in auth_update script. #619525 (Bug #63894) NoneType' object has no attribute 'write' Build: From the ova. - PATCHLEVEL = 595402 #600732 (Bug #63830) Report symlink'd directory error more gracefully. #587979 (Bug #63099) Can't pull after nuking git folder on gf server. #577299 (Bug #61851) Handle non-text content in key files in p4gf_auth_update_authorized_keys.py. #560515 (Bug #64448) p4gf_init_repo.py's initial populate fails for versioned files without a newline at the end. ------------------------------------------- Major new functionality in 2012.2: #544649 (Bug #56939) Git Fusion now supports Perforce Proxy, Perforce Broker, and Perforce Replica. #544649 (Bug #60109) Permit multiple Git Fusion gateways to connect to a single Perforce service. #534453 (Bug #59761) SSH2: Support "SSH2", RFC 4716 SSH Public Key File Format. Minor new functionality in 2012.2: #549553 (Bug #61271) OVA Install: only on first boot, check for latest p4d (same version as OVA p4d) and download if patched p4d on FTP. #542594 (Bug #61004) Multiple Git Fusion gateways: @list must show all Git Fusion repos, not just the Git Fusion repos on the current Git Fusion server that runs the @list command. #541247 (Bug #60849) @list output must be sorted alphabetically. #531995 (Bug #60106) Git Fusion now uses Python 3. #531306 (Bug #60135) Git Fusion must put all its file/blob temp files in a subdirectory under the temp directory, not in /tmp/ directly. #524419 (Bug #59529) p4gf_delete_repo.py now deletes //.git-fusion/objects/... files associated with that view. #521688 (Bug #59325) Auto-clear abandoned locks. If a Git operation is canceled or otherwise exits before completion, clean up any locks left behind by the dead process. No longer require human deletion of lock counters. #518427 (Bug #59315) Support clone from "git+ssh" URLs, with repository name separated from hostname by a slash character instead of a colon. #518426 (Bug #59350) Include 'p4 info' server address in '@info' output. #518233 (Bug #58808) Report results of p4gf_auth_update_authorized_keys.py. #518232 (Bug #58807) Report server address when running p4gf_delete_repo.py -a. ------------------------------------------- Bugs fixed in 2012.2: #561694 (Bug #62010) Git Fusion must not fail with "TypeError: 'str' does not support the buffer interface" on some text files. #551211 (Bug #61414) TCP connect error on /etc/init.d/p4d stop #551104 (Bug #61472) p4gf_auth_update_authorized_keys.py must report login failure as login failure, not "no keys found." #551103 (Bug #61491) Improve "Invalid startAt= not commit sha1..." error message. #551102 (Bug #61486) p4gf_delete_repo.py -ay must report which client has an invalid view. #551102 (Bug #61501) p4gf_delete_repo.py -ay must behave if no gf clients exist. #549553 (Bug #61176) OVA: Can't upload new keys to OVA. #549553 (Bug #61178) OVA: uncaught exception selecting "Perforce Server" screen. #548313 (Bug #61021) @info Double error messages using unsupported server. #548313 (Bug #61358) Double error messages when git-fusion-user not granted sufficient privileges. #548313 (Bug #61359) Do not report double error message with illegal view name. #547726 (Bug #61160) /etc/init.d/p4d stop must actually stop, not fail with "You don't have permission for this operation." #547590 (Bug #59983) Can't recover after interrupting clone with Ctrl-C. #547468 (Bug #61028) Exception during exception when over licensing quota. #546957 (Bug #59847) OVA Config Tool: No warning when dm.protects.allow not set. #546678 (Bug #60700) Git Fusion must filter all user-supplied strings to defend against shell injection. #546677 (Bug #60701) Git Fusion must replace calls to subprocess.Popen() with subprocess.somethingelse(). #544822 (Bug #61139) Do not intermingle Git Fusion progress info with other Git output during clone/pull. #544779 (Bug #60002) Debug log output must appear in debug log, not auth log. #543124 (Bug #61034) p4gf_delete_repo.py -ay must clear git_fusion_init_lock. #543116 (Bug #60770) Git push must not fail without warning when git-fusion-user does not have write access. Explain why it failed. #543067 (Bug #60663) parse_git_version() must parse Git version string from Git release candidate built from source. For example: 1.8.0.rc2.4.g42e55a5. #543022 (Bug #60129) OVA config: "p4broker info" string indices must be integers, not str. #543022 (Bug #60577) Brokers that "pass" commands with a message break Git Fusion. #535901 (Bug #59807) Do not dump call stack on warning about server versions, p4gf_super_init.py. #535122 (Bug #60235) OVA config tool does not work with security level 3. #534453 (Bug #61403) Set permissions on authorized_keys correctly. #531306 (Bug #60136) Git Fusion must not leave behind thousands of temporary scratch files. #525354 (Bug #59862) p4gf_xxx.py command line usage strings should use a full word "view", not metavar "S", for view names. #518900 (Bug #59386) Disallow non-fast-forward pushes. ------------------------------------------- Major new functionality in 2012.1 * git clone copies history from Perforce to Git. * git push copies history from Git to Perforce. * Perforce protections enforced. Bugs fixed in 2012.1 #532149 (Bug #60238) Uploading two user keys in one file must not grant shell access to second or later key.