# The MIT License # Copyright © 2009 Magnus Bergmark # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. class GitRemoteMonitor::Notifier def initialize() # TODO: Auto-discover notification systems and load the one the user have # For now, just use meow. REMEMBER: Remove 'meow' from the bin/ script when # this requirement changes here! require 'meow' @notifier = ::Meow.new('git-remote-monitor') end def notify_commits(name, branch_name, local_commits, remote_commits) message = get_message(local_commits, remote_commits) if message @notifier.notify("#{name} (#{branch_name})", message, :icon => "#{GitRemoteMonitor::PATH}/images/git-logo.png") end end protected def get_message(local_commits, remote_commits) # If there aren't any commits on the remote, we just ignore # this difference. It's because we don't want to notify the user # that they are x commits before the remote. unless remote_commits == 0 # Now, we can have this scenarios: # 1. The branch has not diverged; user has no commits, but remote has. # 2. The branch has diverged; both the user and the remote has commits message = if local_commits > 0 "Diverged! Remote has #{remote_commits} new commits, and you have #{local_commits} commits to push." else "Remote got updated! Now #{remote_commits} commits in front of you." end return message end nil end end