Perforce

Version control

Back to list

Zulip supports integration with Perforce as a trigger that fires once a changelist is submitted and committed.

  1. Download and install our Python bindings and example scripts on the system where the Perforce integration script will be run from.

  2. The Perforce trigger will be installed to a location like /usr/local/share/zulip/integrations/perforce.

  3. Open /usr/local/share/zulip/integrations/perforce/zulip_perforce_config.py with your favorite editor, and change the following lines to specify the email address and API key for your Perforce bot:

    ZULIP_USER = "perforce-bot@chat.zulip.org"
    ZULIP_API_KEY = "0123456789abcdef0123456789abcdef"
    ZULIP_SITE = "https://chat.zulip.org"
    
  4. If you have a P4Web viewer set up, you may change P4_WEB to point at the base URL of the server. If this is configured, then the changelist number of each commit will be converted to a hyperlink that displays the commit details on P4Web.

  5. Edit your trigger table with p4 triggers and add an entry something like the following:

    notify_zulip change-commit //depot/... "/usr/local/share/zulip/integrations/perforce/zulip_change-commit.py %change% %changeroot%"
    
  6. By default, this hook will send to streams of the form depot_subdirectory-commits. So, a changelist that modifies files in //depot/foo/bar/baz will result in a message to stream foo-commits. Messages about changelists that modify files in the depot root or files in multiple direct subdirectories of the depot root will be sent to depot-commits. If you'd prefer different behavior, such as all commits across your depot going to one stream, change it now in zulip_perforce_config.py. Make sure that everyone interested in getting these post-commit Zulips is subscribed to the relevant streams!

  7. By default, this hook will send a message to Zulip even if the destination stream does not yet exist. Messages to nonexistent streams prompt the Zulip Notification Bot to inform the bot's owner by direct message that they may wish to create the stream. If this behaviour is undesirable, for example with a large and busy Perforce server, change the ZULIP_IGNORE_MISSING_STREAM variable in zulip_perforce_config.py to True. This will change the hook's behaviour to first check whether the destination stream exists and silently drop messages if it does not.

You're done! Your Perforce notifications may look like this:

Perforce notification bot message

Logos are trademarks of their respective owners. None of the integrations on this page are created by, affiliated with, or supported by the companies represented by the logos.