SVN::N...:Rsync(3pm)

πŸ“¦
version 0.04000 Β· 2 versions
  • 0.04000 Β· debian bookworm, debian trixie, ubuntu noble, ubuntu resolute, ubuntu stonking (latest)
  • 0.04000 Β· ubuntu jammy
, in debian bookworm, debian trixie, ubuntu noble, ubuntu resolute, ubuntu stonking

πŸ¦‹ SVN::N...:Rsync(3pm) β€” the manual page, but make it a group chat

ok so this is the page for SVN::Notify::Mirror::Rsync, straight out of the User Contributed Perl Documentation (that's the 3pm section bestie, Perl modules only ✨). It's a Perl module. It rsyncs stuff. It's giving sysadmin glamour πŸ’…


🌸 NAME 🌸

SVN::Notify::Mirror::Rsync β€” mirror a repository path via Rsync πŸ’–


✨ SYNOPSIS ✨

ok so the classic move is to use svnnotify in post-commit:

svnnotify --repos-path "$1" --revision "$2" \
 --handler Mirror::Rsync --to "/path/to/local/htdocs" \
 [--svn-binary /full/path/to/svn] \
 --rsync-host remote_server \
 [--rsync-delete=[yes|no]] \
 [--rsync-dest "/path/on/remote/server"] \
 [--rsync-args arg1 [--rsync-args arg2...]]
 [[--rsync-ssh] [--ssh-user remote_user] \
 [--ssh-identity /home/user/.ssh/id_rsa]]

or, and honestly this is the main character option, use SVN::Notify::Config for a way more sophisticated setup πŸŽ€:

#!/usr/bin/perl -MSVN::Notify::Config=$0
--- #YAML:1.0
'':
  PATH: "/usr/bin:/usr/local/bin"
'path/in/repository':
  handler: Mirror
  to: "/path/to/www/htdocs"
'some/other/path/in/repository':
  handler: Mirror
  to: "/path/to/local/www/htdocs"
  rsync-host: "remote_host"
  rsync-dest: "/path/on/remote/www/htdocs"
  ssh-user: "remote_user"
  ssh-identity: "/home/user/.ssh/id_rsa"

πŸ’œ DESCRIPTION πŸ’œ

The whole vibe: keep a directory in sync with a portion of a Subversion repository. Like, that's it, that's the job 🫢

Typically you're using this to keep a development web server in sync with the changes made to the repository. And that directory can either live on the same box as the repository itself, or it can be remote (over an SSH connection) πŸ¦‹


πŸ‘‘ USAGE πŸ‘‘

Depending on whether the target is a "Local Mirror" or a Remote Mirror, there are different options available. Every single option is available either as a commandline option to svnnotify or as a hash key in SVN::Notify::Config (go read their respective documentation for more deets, iykyk) πŸ’…

🌈 Working Copy on Local host 🌈

Because svn export is not able to be consistently updated, the local rsync'd directory must be a full working copy, no shortcuts. The remote server will only contain the ordinary files (no Subversion admin files, clean and fresh ✨).

The files in the working copy must be writeable (preferably owned) by the user identity executing the hook script β€” and that's the same user identity that's running Apache or svnserve respectively. Not negotiable bestie 😭

πŸŽ€ Local Mirror πŸŽ€

Please see SVN::Notify::Mirror for details. That's the whole thing. Go look πŸ’–

πŸ”₯ Remote Mirror πŸ”₯

This one's for directories that are not located on the same machine as the repository itself. Typically this might be a production web server sitting in a DMZ, so special consideration must be paid to security concerns. Especially since the remote mirror server may not be able to directly access the repository box 😳

  • rsync-host β€” this value is required and must be the hostname or IP address of the remote host (you know, where the mirror directories reside πŸ‘‘).
  • rsync-delete β€” the default mode of operation is to delete remote files which are not present in the local working copy.
⚠️ NOTE: this will delete any unversioned files in the remote directory tree. Unless you have all of your files under version control, you should pass the --no-rsync-delete or --rsync-delete no option. Like, fr fr, please do this πŸ’€
  • rsync-dest β€” this optional value specifies the path to update on the remote host. If you do not specify this value, the same path as passed in as the --to parameter will be used (and yeah, this may not be what you meant to do πŸ™ˆ).
  • rsync-args β€” this optional parameter can be used to pass additional commandline options to the rsync command. You can use this multiple times in order to pass multiple options. The default args are --archive --compress. See the rsync-ssh options for using SSH instead of RSH (rather than pass those commands via --rsync-args).
  • rsync-ssh β€” this optional parameter signals that you wish to use SSH instead of whatever the default remote shell program is configured in your copy of rsync. You may need to set one or more of the ssh-* parameters as well.
  • ssh-user β€” if the remote user is different than the local user executing the postcommit script, you can specify it with this parameter. You would often use this in conjunction with the next parameter πŸ‘€
  • ssh-identity β€” this value may be optional and should be the full path to the local identity file being used to authenticate with the remote host. If you are setting the ssh-user to be something other than the local user name, you will typically also have to set the ssh-identity πŸ—οΈ

🌟 AUTHOR 🌟

John Peacock <jpeacock@cpan.org> β€” iconic, we stan πŸ’–


Copyright (c) 2005-2008 John Peacock

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

The full text of the license can be found in the LICENSE file included with this module. Read it, bestie, it's good for you πŸ“œ


πŸ¦‹ SEE ALSO πŸ¦‹

  • SVN::Notify
  • SVN::Notify::Config
  • SVN::Notify::Mirror

and that's the page!! no cap πŸ’… this was perl v5.34.0, dated 2022-06-17, and it lives under SVN::N...:Rsync(3pm) in the User Contributed Perl Documentation. slay, go mirror something πŸŽ€βœ¨πŸŒΈ

πŸ“¦ where this page comes from