mirror of
https://github.com/servo/servo.git
synced 2025-08-06 06:00:15 +01:00
Auto merge of #15013 - servo:notify-command, r=emilio
Add config to do desktop notifications by running an abitrary command. <!-- Please describe your changes on the following line: --> I now have an usual setup where I use a (fast) remote machine for building, and I’m adding a hack to forward end-of-build notifications back to my laptop. This is the motivation for this change, but I kept it general enough that it could be used in other situations. --- <!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: --> - [x] `./mach build -d` does not report any errors - [x] `./mach test-tidy` does not report any errors - [ ] These changes fix #__ (github issue number if applicable). <!-- Either: --> - [ ] There are tests for these changes OR - [ ] These changes do not require tests because _____ <!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. --> <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/15013) <!-- Reviewable:end -->
This commit is contained in:
commit
414e2e907d
2 changed files with 35 additions and 14 deletions
|
@ -92,24 +92,39 @@ def notify_darwin(title, text):
|
||||||
raise Exception("Optional Python module 'pyobjc' is not installed.")
|
raise Exception("Optional Python module 'pyobjc' is not installed.")
|
||||||
|
|
||||||
|
|
||||||
def notify_build_done(elapsed, success=True):
|
def notify_with_command(command):
|
||||||
|
def notify(title, text):
|
||||||
|
if call([command, title, text]) != 0:
|
||||||
|
raise Exception("Could not run '%s'." % command)
|
||||||
|
return notify
|
||||||
|
|
||||||
|
|
||||||
|
def notify_build_done(config, elapsed, success=True):
|
||||||
"""Generate desktop notification when build is complete and the
|
"""Generate desktop notification when build is complete and the
|
||||||
elapsed build time was longer than 30 seconds."""
|
elapsed build time was longer than 30 seconds."""
|
||||||
if elapsed > 30:
|
if elapsed > 30:
|
||||||
notify("Servo build", "%s in %s" % ("Completed" if success else "FAILED", format_duration(elapsed)))
|
notify(config, "Servo build",
|
||||||
|
"%s in %s" % ("Completed" if success else "FAILED", format_duration(elapsed)))
|
||||||
|
|
||||||
|
|
||||||
def notify(title, text):
|
def notify(config, title, text):
|
||||||
"""Generate a desktop notification using appropriate means on
|
"""Generate a desktop notification using appropriate means on
|
||||||
supported platforms Linux, Windows, and Mac OS. On unsupported
|
supported platforms Linux, Windows, and Mac OS. On unsupported
|
||||||
platforms, this function acts as a no-op."""
|
platforms, this function acts as a no-op.
|
||||||
platforms = {
|
|
||||||
"linux": notify_linux,
|
If notify-command is set in the [tools] section of the configuration,
|
||||||
"linux2": notify_linux,
|
that is used instead."""
|
||||||
"win32": notify_win,
|
notify_command = config["tools"].get("notify-command")
|
||||||
"darwin": notify_darwin
|
if notify_command:
|
||||||
}
|
func = notify_with_command(notify_command)
|
||||||
func = platforms.get(sys.platform)
|
else:
|
||||||
|
platforms = {
|
||||||
|
"linux": notify_linux,
|
||||||
|
"linux2": notify_linux,
|
||||||
|
"win32": notify_win,
|
||||||
|
"darwin": notify_darwin
|
||||||
|
}
|
||||||
|
func = platforms.get(sys.platform)
|
||||||
|
|
||||||
if func is not None:
|
if func is not None:
|
||||||
try:
|
try:
|
||||||
|
@ -324,7 +339,7 @@ class MachCommands(CommandBase):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
# Generate Desktop Notification if elapsed-time > some threshold value
|
# Generate Desktop Notification if elapsed-time > some threshold value
|
||||||
notify_build_done(elapsed, status == 0)
|
notify_build_done(self.config, elapsed, status == 0)
|
||||||
|
|
||||||
print("Build %s in %s" % ("Completed" if status == 0 else "FAILED", format_duration(elapsed)))
|
print("Build %s in %s" % ("Completed" if status == 0 else "FAILED", format_duration(elapsed)))
|
||||||
return status
|
return status
|
||||||
|
@ -375,7 +390,7 @@ class MachCommands(CommandBase):
|
||||||
elapsed = time() - build_start
|
elapsed = time() - build_start
|
||||||
|
|
||||||
# Generate Desktop Notification if elapsed-time > some threshold value
|
# Generate Desktop Notification if elapsed-time > some threshold value
|
||||||
notify_build_done(elapsed)
|
notify_build_done(self.config, elapsed)
|
||||||
|
|
||||||
print("CEF build completed in %s" % format_duration(elapsed))
|
print("CEF build completed in %s" % format_duration(elapsed))
|
||||||
|
|
||||||
|
@ -430,7 +445,7 @@ class MachCommands(CommandBase):
|
||||||
elapsed = time() - build_start
|
elapsed = time() - build_start
|
||||||
|
|
||||||
# Generate Desktop Notification if elapsed-time > some threshold value
|
# Generate Desktop Notification if elapsed-time > some threshold value
|
||||||
notify_build_done(elapsed)
|
notify_build_done(self.config, elapsed)
|
||||||
|
|
||||||
print("GeckoLib build completed in %s" % format_duration(elapsed))
|
print("GeckoLib build completed in %s" % format_duration(elapsed))
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,12 @@ system-cargo = false
|
||||||
# Defaults to true
|
# Defaults to true
|
||||||
rustc-with-gold = true
|
rustc-with-gold = true
|
||||||
|
|
||||||
|
# If uncommented, this command is used instead of the platform’s default
|
||||||
|
# to notify at the end of a compilation that took a long time.
|
||||||
|
# This is the name or path of an executable called with two arguments:
|
||||||
|
# the summary and content of the notification.
|
||||||
|
#notify-command = "notify-send"
|
||||||
|
|
||||||
[build]
|
[build]
|
||||||
# Set "mode = dev" or use `mach build --dev` to build the project with warning.
|
# Set "mode = dev" or use `mach build --dev` to build the project with warning.
|
||||||
# or Set "mode = release" or use `mach build --release` for optimized build.
|
# or Set "mode = release" or use `mach build --release` for optimized build.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue