hggtk/serve.py
author Steve Borho <steve@borho.org>
Sun, 27 Jan 2008 21:52:17 -0600
changeset 889 3bc868f2b133
parent 883 25adeacce00e
child 999 071b3aa8b7c3
permissions -rw-r--r--
hggtk/serve: set web.name into ui object, cleanup config usage * reload configuration when thgconfig exits * use --verbose instead of writing our own 'listening' message * set web.name into ui before starting server
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
309
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
     1
#
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
     2
# TortoiseHg dialog to start web server
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
     3
#
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
     4
# Copyright (C) 2007 Steve Borho <steve@borho.org>
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
     5
# Copyright (C) 2007 TK Soh <teekaysoh@gmail.com>
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
     6
#
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
     7
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
     8
try:
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
     9
    import pygtk
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
    10
    pygtk.require("2.0")
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
    11
except:
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
    12
    pass
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
    13
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
    14
import gtk
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
    15
import gobject
872
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
    16
import httplib
309
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
    17
import os
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
    18
import pango
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
    19
import Queue
312
03bd6b30de68 hggtk: serve dialog, cleanup dialog messages
Steve Borho <steve@borho.org>
parents: 311
diff changeset
    20
import socket
309
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
    21
import sys
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
    22
import threading
872
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
    23
import time
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
    24
import hglib
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
    25
from dialog import question_dialog, error_dialog
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
    26
from mercurial import hg, ui, commands, cmdutil, util
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
    27
from mercurial.hgweb import server
309
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
    28
from mercurial.i18n import _
455
1a562f070292 hggtk: set dialog icons
Steve Borho <steve@borho.org>
parents: 402
diff changeset
    29
from shlib import set_tortoise_icon
309
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
    30
872
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
    31
gservice = None
853
a8fc63e4cba4 hggtk/serve: new window layout
Steve Borho <steve@borho.org>
parents: 553
diff changeset
    32
class ServeDialog(gtk.Window):
309
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
    33
    """ Dialog to run web server"""
872
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
    34
    def __init__(self, cwd='', root=''):
309
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
    35
        """ Initialize the Dialog """
853
a8fc63e4cba4 hggtk/serve: new window layout
Steve Borho <steve@borho.org>
parents: 553
diff changeset
    36
        gtk.Window.__init__(self, gtk.WINDOW_TOPLEVEL)
309
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
    37
455
1a562f070292 hggtk: set dialog icons
Steve Borho <steve@borho.org>
parents: 402
diff changeset
    38
        set_tortoise_icon(self, 'proxy.ico')
324
f18e8b19c8e4 hggtk: Capture response event in sever dialog
Steve Borho <steve@borho.org>
parents: 323
diff changeset
    39
        self.connect('delete-event', self._delete)
312
03bd6b30de68 hggtk: serve dialog, cleanup dialog messages
Steve Borho <steve@borho.org>
parents: 311
diff changeset
    40
872
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
    41
        # Pipe stderr, stdout to self.write
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
    42
        sys.stdout = self
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
    43
        sys.stderr = self
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
    44
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
    45
        # Override mercurial.commands.serve() with our own version
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
    46
        # that supports being stopped
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
    47
        commands.table.update(thg_serve_cmd)
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
    48
368
27d438da221d hggtk/serve: add button to view web server using default browser
TK Soh <teekaysoh@yahoo.com>
parents: 351
diff changeset
    49
        self._url = None
325
f3f9733eec37 hggtk: Pass repo to serve dialog, fixup web.name
Steve Borho <steve@borho.org>
parents: 324
diff changeset
    50
        self._root = root
889
3bc868f2b133 hggtk/serve: set web.name into ui object, cleanup config usage
Steve Borho <steve@borho.org>
parents: 883
diff changeset
    51
        if cwd:
3bc868f2b133 hggtk/serve: set web.name into ui object, cleanup config usage
Steve Borho <steve@borho.org>
parents: 883
diff changeset
    52
            os.chdir(cwd)
309
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
    53
        
889
3bc868f2b133 hggtk/serve: set web.name into ui object, cleanup config usage
Steve Borho <steve@borho.org>
parents: 883
diff changeset
    54
        self._get_config()
326
21ca136e64c0 hggtk: Make serve dialog default to 500x300
Steve Borho <steve@borho.org>
parents: 325
diff changeset
    55
        self.set_default_size(500, 300)
309
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
    56
        
351
a7d5afeb5824 hggtk: refactor serve dialog to use toolbar
TK Soh <teekaysoh@yahoo.com>
parents: 326
diff changeset
    57
        # toolbar
a7d5afeb5824 hggtk: refactor serve dialog to use toolbar
TK Soh <teekaysoh@yahoo.com>
parents: 326
diff changeset
    58
        self.tbar = gtk.Toolbar()
a7d5afeb5824 hggtk: refactor serve dialog to use toolbar
TK Soh <teekaysoh@yahoo.com>
parents: 326
diff changeset
    59
        self._button_start = self._toolbutton(gtk.STOCK_MEDIA_PLAY,
a7d5afeb5824 hggtk: refactor serve dialog to use toolbar
TK Soh <teekaysoh@yahoo.com>
parents: 326
diff changeset
    60
                                              'Start', 
a7d5afeb5824 hggtk: refactor serve dialog to use toolbar
TK Soh <teekaysoh@yahoo.com>
parents: 326
diff changeset
    61
                                              self._on_start_clicked,
a7d5afeb5824 hggtk: refactor serve dialog to use toolbar
TK Soh <teekaysoh@yahoo.com>
parents: 326
diff changeset
    62
                                              None)
a7d5afeb5824 hggtk: refactor serve dialog to use toolbar
TK Soh <teekaysoh@yahoo.com>
parents: 326
diff changeset
    63
        self._button_stop  = self._toolbutton(gtk.STOCK_MEDIA_STOP,
a7d5afeb5824 hggtk: refactor serve dialog to use toolbar
TK Soh <teekaysoh@yahoo.com>
parents: 326
diff changeset
    64
                                              'Stop',
a7d5afeb5824 hggtk: refactor serve dialog to use toolbar
TK Soh <teekaysoh@yahoo.com>
parents: 326
diff changeset
    65
                                              self._on_stop_clicked,
a7d5afeb5824 hggtk: refactor serve dialog to use toolbar
TK Soh <teekaysoh@yahoo.com>
parents: 326
diff changeset
    66
                                              None)
368
27d438da221d hggtk/serve: add button to view web server using default browser
TK Soh <teekaysoh@yahoo.com>
parents: 351
diff changeset
    67
        self._button_browse = self._toolbutton(gtk.STOCK_HOME,
27d438da221d hggtk/serve: add button to view web server using default browser
TK Soh <teekaysoh@yahoo.com>
parents: 351
diff changeset
    68
                                              'Browse',
27d438da221d hggtk/serve: add button to view web server using default browser
TK Soh <teekaysoh@yahoo.com>
parents: 351
diff changeset
    69
                                              self._on_browse_clicked,
27d438da221d hggtk/serve: add button to view web server using default browser
TK Soh <teekaysoh@yahoo.com>
parents: 351
diff changeset
    70
                                              None)
469
a9c1082bbd8f hggtk/serve: add 'Configure' toolbar button
Steve Borho <steve@borho.org>
parents: 459
diff changeset
    71
        self._button_conf = self._toolbutton(gtk.STOCK_PREFERENCES,
a9c1082bbd8f hggtk/serve: add 'Configure' toolbar button
Steve Borho <steve@borho.org>
parents: 459
diff changeset
    72
                                              'Configure',
a9c1082bbd8f hggtk/serve: add 'Configure' toolbar button
Steve Borho <steve@borho.org>
parents: 459
diff changeset
    73
                                              self._on_conf_clicked,
a9c1082bbd8f hggtk/serve: add 'Configure' toolbar button
Steve Borho <steve@borho.org>
parents: 459
diff changeset
    74
                                              None)
853
a8fc63e4cba4 hggtk/serve: new window layout
Steve Borho <steve@borho.org>
parents: 553
diff changeset
    75
        sep = gtk.SeparatorToolItem()
a8fc63e4cba4 hggtk/serve: new window layout
Steve Borho <steve@borho.org>
parents: 553
diff changeset
    76
        sep.set_expand(True)
a8fc63e4cba4 hggtk/serve: new window layout
Steve Borho <steve@borho.org>
parents: 553
diff changeset
    77
        sep.set_draw(False)
a8fc63e4cba4 hggtk/serve: new window layout
Steve Borho <steve@borho.org>
parents: 553
diff changeset
    78
        self._button_close = self._toolbutton(gtk.STOCK_CLOSE, 'Close',
a8fc63e4cba4 hggtk/serve: new window layout
Steve Borho <steve@borho.org>
parents: 553
diff changeset
    79
                self._close_clicked)
a8fc63e4cba4 hggtk/serve: new window layout
Steve Borho <steve@borho.org>
parents: 553
diff changeset
    80
351
a7d5afeb5824 hggtk: refactor serve dialog to use toolbar
TK Soh <teekaysoh@yahoo.com>
parents: 326
diff changeset
    81
        tbuttons = [
a7d5afeb5824 hggtk: refactor serve dialog to use toolbar
TK Soh <teekaysoh@yahoo.com>
parents: 326
diff changeset
    82
                self._button_start,
a7d5afeb5824 hggtk: refactor serve dialog to use toolbar
TK Soh <teekaysoh@yahoo.com>
parents: 326
diff changeset
    83
                self._button_stop,
a7d5afeb5824 hggtk: refactor serve dialog to use toolbar
TK Soh <teekaysoh@yahoo.com>
parents: 326
diff changeset
    84
                gtk.SeparatorToolItem(),
368
27d438da221d hggtk/serve: add button to view web server using default browser
TK Soh <teekaysoh@yahoo.com>
parents: 351
diff changeset
    85
                self._button_browse,
553
72d6af483bf7 hggtk/serve: group tool buttons by functionality
TK Soh <teekaysoh@yahoo.com>
parents: 516
diff changeset
    86
                gtk.SeparatorToolItem(),
469
a9c1082bbd8f hggtk/serve: add 'Configure' toolbar button
Steve Borho <steve@borho.org>
parents: 459
diff changeset
    87
                self._button_conf,
853
a8fc63e4cba4 hggtk/serve: new window layout
Steve Borho <steve@borho.org>
parents: 553
diff changeset
    88
                sep,
a8fc63e4cba4 hggtk/serve: new window layout
Steve Borho <steve@borho.org>
parents: 553
diff changeset
    89
                self._button_close,
351
a7d5afeb5824 hggtk: refactor serve dialog to use toolbar
TK Soh <teekaysoh@yahoo.com>
parents: 326
diff changeset
    90
            ]
a7d5afeb5824 hggtk: refactor serve dialog to use toolbar
TK Soh <teekaysoh@yahoo.com>
parents: 326
diff changeset
    91
        for btn in tbuttons:
a7d5afeb5824 hggtk: refactor serve dialog to use toolbar
TK Soh <teekaysoh@yahoo.com>
parents: 326
diff changeset
    92
            self.tbar.insert(btn, -1)
853
a8fc63e4cba4 hggtk/serve: new window layout
Steve Borho <steve@borho.org>
parents: 553
diff changeset
    93
a8fc63e4cba4 hggtk/serve: new window layout
Steve Borho <steve@borho.org>
parents: 553
diff changeset
    94
        vbox = gtk.VBox()
a8fc63e4cba4 hggtk/serve: new window layout
Steve Borho <steve@borho.org>
parents: 553
diff changeset
    95
        self.add(vbox)
a8fc63e4cba4 hggtk/serve: new window layout
Steve Borho <steve@borho.org>
parents: 553
diff changeset
    96
        vbox.pack_start(self.tbar, False, False, 2)
351
a7d5afeb5824 hggtk: refactor serve dialog to use toolbar
TK Soh <teekaysoh@yahoo.com>
parents: 326
diff changeset
    97
        
309
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
    98
        # revision input
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
    99
        revbox = gtk.HBox()
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
   100
        lbl = gtk.Label("HTTP Port:")
323
feb7f335c6d7 hggtk: minor cleanup in serve dialog
Steve Borho <steve@borho.org>
parents: 322
diff changeset
   101
        lbl.set_property("width-chars", 16)
309
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
   102
        lbl.set_alignment(0, 0.5)
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
   103
        self._port_input = gtk.Entry()
459
35252de5daee hggtk/serve.py: respect web.port configuration
Steve Borho <steve@borho.org>
parents: 455
diff changeset
   104
        self._port_input.set_text(self.defport)
309
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
   105
        revbox.pack_start(lbl, False, False)
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
   106
        revbox.pack_start(self._port_input, False, False)
853
a8fc63e4cba4 hggtk/serve: new window layout
Steve Borho <steve@borho.org>
parents: 553
diff changeset
   107
        vbox.pack_start(revbox, False, False, 2)
309
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
   108
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
   109
        scrolledwindow = gtk.ScrolledWindow()
351
a7d5afeb5824 hggtk: refactor serve dialog to use toolbar
TK Soh <teekaysoh@yahoo.com>
parents: 326
diff changeset
   110
        scrolledwindow.set_shadow_type(gtk.SHADOW_ETCHED_IN)
309
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
   111
        scrolledwindow.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
   112
        self.textview = gtk.TextView(buffer=None)
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
   113
        self.textview.set_editable(False)
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
   114
        self.textview.modify_font(pango.FontDescription("Monospace"))
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
   115
        scrolledwindow.add(self.textview)
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
   116
        self.textview.set_editable(False)
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
   117
        self.textbuffer = self.textview.get_buffer()
853
a8fc63e4cba4 hggtk/serve: new window layout
Steve Borho <steve@borho.org>
parents: 553
diff changeset
   118
        vbox.pack_start(scrolledwindow, True, True)
889
3bc868f2b133 hggtk/serve: set web.name into ui object, cleanup config usage
Steve Borho <steve@borho.org>
parents: 883
diff changeset
   119
        self._set_button_states()
309
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
   120
889
3bc868f2b133 hggtk/serve: set web.name into ui object, cleanup config usage
Steve Borho <steve@borho.org>
parents: 883
diff changeset
   121
    def _get_config(self):
3bc868f2b133 hggtk/serve: set web.name into ui object, cleanup config usage
Steve Borho <steve@borho.org>
parents: 883
diff changeset
   122
        try:
3bc868f2b133 hggtk/serve: set web.name into ui object, cleanup config usage
Steve Borho <steve@borho.org>
parents: 883
diff changeset
   123
            repo = hg.repository(ui.ui(), path=self._root)
3bc868f2b133 hggtk/serve: set web.name into ui object, cleanup config usage
Steve Borho <steve@borho.org>
parents: 883
diff changeset
   124
        except hg.RepoError:
3bc868f2b133 hggtk/serve: set web.name into ui object, cleanup config usage
Steve Borho <steve@borho.org>
parents: 883
diff changeset
   125
            print 'no repository found'
3bc868f2b133 hggtk/serve: set web.name into ui object, cleanup config usage
Steve Borho <steve@borho.org>
parents: 883
diff changeset
   126
            gtk.main_quit()
3bc868f2b133 hggtk/serve: set web.name into ui object, cleanup config usage
Steve Borho <steve@borho.org>
parents: 883
diff changeset
   127
        self.defport = repo.ui.config('web', 'port') or '8000'
3bc868f2b133 hggtk/serve: set web.name into ui object, cleanup config usage
Steve Borho <steve@borho.org>
parents: 883
diff changeset
   128
        self.webname = repo.ui.config('web', 'name') or \
3bc868f2b133 hggtk/serve: set web.name into ui object, cleanup config usage
Steve Borho <steve@borho.org>
parents: 883
diff changeset
   129
                os.path.basename(self._root)
3bc868f2b133 hggtk/serve: set web.name into ui object, cleanup config usage
Steve Borho <steve@borho.org>
parents: 883
diff changeset
   130
        self.set_title("hg serve - " + self.webname)
309
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
   131
351
a7d5afeb5824 hggtk: refactor serve dialog to use toolbar
TK Soh <teekaysoh@yahoo.com>
parents: 326
diff changeset
   132
    def _toolbutton(self, stock, label, handler, menu=None, userdata=None):
a7d5afeb5824 hggtk: refactor serve dialog to use toolbar
TK Soh <teekaysoh@yahoo.com>
parents: 326
diff changeset
   133
        if menu:
a7d5afeb5824 hggtk: refactor serve dialog to use toolbar
TK Soh <teekaysoh@yahoo.com>
parents: 326
diff changeset
   134
            tbutton = gtk.MenuToolButton(stock)
a7d5afeb5824 hggtk: refactor serve dialog to use toolbar
TK Soh <teekaysoh@yahoo.com>
parents: 326
diff changeset
   135
            tbutton.set_menu(menu)
a7d5afeb5824 hggtk: refactor serve dialog to use toolbar
TK Soh <teekaysoh@yahoo.com>
parents: 326
diff changeset
   136
        else:
a7d5afeb5824 hggtk: refactor serve dialog to use toolbar
TK Soh <teekaysoh@yahoo.com>
parents: 326
diff changeset
   137
            tbutton = gtk.ToolButton(stock)
a7d5afeb5824 hggtk: refactor serve dialog to use toolbar
TK Soh <teekaysoh@yahoo.com>
parents: 326
diff changeset
   138
            
a7d5afeb5824 hggtk: refactor serve dialog to use toolbar
TK Soh <teekaysoh@yahoo.com>
parents: 326
diff changeset
   139
        tbutton.set_label(label)
a7d5afeb5824 hggtk: refactor serve dialog to use toolbar
TK Soh <teekaysoh@yahoo.com>
parents: 326
diff changeset
   140
        tbutton.connect('clicked', handler, userdata)
a7d5afeb5824 hggtk: refactor serve dialog to use toolbar
TK Soh <teekaysoh@yahoo.com>
parents: 326
diff changeset
   141
        return tbutton
a7d5afeb5824 hggtk: refactor serve dialog to use toolbar
TK Soh <teekaysoh@yahoo.com>
parents: 326
diff changeset
   142
            
a7d5afeb5824 hggtk: refactor serve dialog to use toolbar
TK Soh <teekaysoh@yahoo.com>
parents: 326
diff changeset
   143
    def _close_clicked(self, *args):
853
a8fc63e4cba4 hggtk/serve: new window layout
Steve Borho <steve@borho.org>
parents: 553
diff changeset
   144
        if self._server_stopped() == True:
a8fc63e4cba4 hggtk/serve: new window layout
Steve Borho <steve@borho.org>
parents: 553
diff changeset
   145
            gtk.main_quit()
351
a7d5afeb5824 hggtk: refactor serve dialog to use toolbar
TK Soh <teekaysoh@yahoo.com>
parents: 326
diff changeset
   146
        
324
f18e8b19c8e4 hggtk: Capture response event in sever dialog
Steve Borho <steve@borho.org>
parents: 323
diff changeset
   147
    def _delete(self, widget, event):
853
a8fc63e4cba4 hggtk/serve: new window layout
Steve Borho <steve@borho.org>
parents: 553
diff changeset
   148
        if self._server_stopped() == True:
a8fc63e4cba4 hggtk/serve: new window layout
Steve Borho <steve@borho.org>
parents: 553
diff changeset
   149
            gtk.main_quit()
a8fc63e4cba4 hggtk/serve: new window layout
Steve Borho <steve@borho.org>
parents: 553
diff changeset
   150
        else:
a8fc63e4cba4 hggtk/serve: new window layout
Steve Borho <steve@borho.org>
parents: 553
diff changeset
   151
            return True
324
f18e8b19c8e4 hggtk: Capture response event in sever dialog
Steve Borho <steve@borho.org>
parents: 323
diff changeset
   152
351
a7d5afeb5824 hggtk: refactor serve dialog to use toolbar
TK Soh <teekaysoh@yahoo.com>
parents: 326
diff changeset
   153
    def _server_stopped(self):
a7d5afeb5824 hggtk: refactor serve dialog to use toolbar
TK Soh <teekaysoh@yahoo.com>
parents: 326
diff changeset
   154
        '''
a7d5afeb5824 hggtk: refactor serve dialog to use toolbar
TK Soh <teekaysoh@yahoo.com>
parents: 326
diff changeset
   155
        check if server is running, or to terminate if running
a7d5afeb5824 hggtk: refactor serve dialog to use toolbar
TK Soh <teekaysoh@yahoo.com>
parents: 326
diff changeset
   156
        '''
872
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   157
        if gservice and not gservice.stopped:
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   158
            if question_dialog("Really Exit?",
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   159
                    "Server process is still running\n" +
324
f18e8b19c8e4 hggtk: Capture response event in sever dialog
Steve Borho <steve@borho.org>
parents: 323
diff changeset
   160
                    "Exiting will stop the server.") != gtk.RESPONSE_YES:
351
a7d5afeb5824 hggtk: refactor serve dialog to use toolbar
TK Soh <teekaysoh@yahoo.com>
parents: 326
diff changeset
   161
                return False
a7d5afeb5824 hggtk: refactor serve dialog to use toolbar
TK Soh <teekaysoh@yahoo.com>
parents: 326
diff changeset
   162
            else:
a7d5afeb5824 hggtk: refactor serve dialog to use toolbar
TK Soh <teekaysoh@yahoo.com>
parents: 326
diff changeset
   163
                self._stop_server()
a7d5afeb5824 hggtk: refactor serve dialog to use toolbar
TK Soh <teekaysoh@yahoo.com>
parents: 326
diff changeset
   164
                return True
a7d5afeb5824 hggtk: refactor serve dialog to use toolbar
TK Soh <teekaysoh@yahoo.com>
parents: 326
diff changeset
   165
        else:
a7d5afeb5824 hggtk: refactor serve dialog to use toolbar
TK Soh <teekaysoh@yahoo.com>
parents: 326
diff changeset
   166
            return True
324
f18e8b19c8e4 hggtk: Capture response event in sever dialog
Steve Borho <steve@borho.org>
parents: 323
diff changeset
   167
368
27d438da221d hggtk/serve: add button to view web server using default browser
TK Soh <teekaysoh@yahoo.com>
parents: 351
diff changeset
   168
    def _set_button_states(self):
872
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   169
        if gservice and not gservice.stopped:
368
27d438da221d hggtk/serve: add button to view web server using default browser
TK Soh <teekaysoh@yahoo.com>
parents: 351
diff changeset
   170
            self._button_start.set_sensitive(False)
27d438da221d hggtk/serve: add button to view web server using default browser
TK Soh <teekaysoh@yahoo.com>
parents: 351
diff changeset
   171
            self._button_stop.set_sensitive(True)
27d438da221d hggtk/serve: add button to view web server using default browser
TK Soh <teekaysoh@yahoo.com>
parents: 351
diff changeset
   172
            self._button_browse.set_sensitive(True)
469
a9c1082bbd8f hggtk/serve: add 'Configure' toolbar button
Steve Borho <steve@borho.org>
parents: 459
diff changeset
   173
            self._button_conf.set_sensitive(False)
368
27d438da221d hggtk/serve: add button to view web server using default browser
TK Soh <teekaysoh@yahoo.com>
parents: 351
diff changeset
   174
        else:
27d438da221d hggtk/serve: add button to view web server using default browser
TK Soh <teekaysoh@yahoo.com>
parents: 351
diff changeset
   175
            self._button_start.set_sensitive(True)
27d438da221d hggtk/serve: add button to view web server using default browser
TK Soh <teekaysoh@yahoo.com>
parents: 351
diff changeset
   176
            self._button_stop.set_sensitive(False)
27d438da221d hggtk/serve: add button to view web server using default browser
TK Soh <teekaysoh@yahoo.com>
parents: 351
diff changeset
   177
            self._button_browse.set_sensitive(False)
469
a9c1082bbd8f hggtk/serve: add 'Configure' toolbar button
Steve Borho <steve@borho.org>
parents: 459
diff changeset
   178
            self._button_conf.set_sensitive(True)
368
27d438da221d hggtk/serve: add button to view web server using default browser
TK Soh <teekaysoh@yahoo.com>
parents: 351
diff changeset
   179
            
351
a7d5afeb5824 hggtk: refactor serve dialog to use toolbar
TK Soh <teekaysoh@yahoo.com>
parents: 326
diff changeset
   180
    def _on_start_clicked(self, *args):
a7d5afeb5824 hggtk: refactor serve dialog to use toolbar
TK Soh <teekaysoh@yahoo.com>
parents: 326
diff changeset
   181
        self._start_server()
368
27d438da221d hggtk/serve: add button to view web server using default browser
TK Soh <teekaysoh@yahoo.com>
parents: 351
diff changeset
   182
        self._set_button_states()
27d438da221d hggtk/serve: add button to view web server using default browser
TK Soh <teekaysoh@yahoo.com>
parents: 351
diff changeset
   183
        
351
a7d5afeb5824 hggtk: refactor serve dialog to use toolbar
TK Soh <teekaysoh@yahoo.com>
parents: 326
diff changeset
   184
    def _on_stop_clicked(self, *args):
a7d5afeb5824 hggtk: refactor serve dialog to use toolbar
TK Soh <teekaysoh@yahoo.com>
parents: 326
diff changeset
   185
        self._stop_server()
a7d5afeb5824 hggtk: refactor serve dialog to use toolbar
TK Soh <teekaysoh@yahoo.com>
parents: 326
diff changeset
   186
368
27d438da221d hggtk/serve: add button to view web server using default browser
TK Soh <teekaysoh@yahoo.com>
parents: 351
diff changeset
   187
    def _on_browse_clicked(self, *args):
27d438da221d hggtk/serve: add button to view web server using default browser
TK Soh <teekaysoh@yahoo.com>
parents: 351
diff changeset
   188
        ''' launch default browser to view repo '''
27d438da221d hggtk/serve: add button to view web server using default browser
TK Soh <teekaysoh@yahoo.com>
parents: 351
diff changeset
   189
        if self._url:
372
d5989a0c10f8 hggtk/serve: start browser in a thread to prevent dialog lock up
TK Soh <teekaysoh@yahoo.com>
parents: 368
diff changeset
   190
            def start_browser():
400
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents: 372
diff changeset
   191
                if os.name == 'nt':
873
fb3a19c45786 hggtk/serve: fixes for timing sensitive bugs
Steve Borho <steve@borho.org>
parents: 872
diff changeset
   192
                    try:
fb3a19c45786 hggtk/serve: fixes for timing sensitive bugs
Steve Borho <steve@borho.org>
parents: 872
diff changeset
   193
                        import win32api, win32con
fb3a19c45786 hggtk/serve: fixes for timing sensitive bugs
Steve Borho <steve@borho.org>
parents: 872
diff changeset
   194
                        win32api.ShellExecute(0, "open", self._url, None, "", 
fb3a19c45786 hggtk/serve: fixes for timing sensitive bugs
Steve Borho <steve@borho.org>
parents: 872
diff changeset
   195
                            win32con.SW_SHOW)
fb3a19c45786 hggtk/serve: fixes for timing sensitive bugs
Steve Borho <steve@borho.org>
parents: 872
diff changeset
   196
                    except:
fb3a19c45786 hggtk/serve: fixes for timing sensitive bugs
Steve Borho <steve@borho.org>
parents: 872
diff changeset
   197
                        # Firefox likes to create exceptions at launch,
fb3a19c45786 hggtk/serve: fixes for timing sensitive bugs
Steve Borho <steve@borho.org>
parents: 872
diff changeset
   198
                        # the user doesn't need to be bothered by them
fb3a19c45786 hggtk/serve: fixes for timing sensitive bugs
Steve Borho <steve@borho.org>
parents: 872
diff changeset
   199
                        pass
400
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents: 372
diff changeset
   200
                else:
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents: 372
diff changeset
   201
                    import gconf
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents: 372
diff changeset
   202
                    client = gconf.client_get_default()
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents: 372
diff changeset
   203
                    browser = client.get_string(
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents: 372
diff changeset
   204
                            '/desktop/gnome/url-handlers/http/command') + '&'
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents: 372
diff changeset
   205
                    os.system(browser % self._url)
372
d5989a0c10f8 hggtk/serve: start browser in a thread to prevent dialog lock up
TK Soh <teekaysoh@yahoo.com>
parents: 368
diff changeset
   206
            threading.Thread(target=start_browser).start()
368
27d438da221d hggtk/serve: add button to view web server using default browser
TK Soh <teekaysoh@yahoo.com>
parents: 351
diff changeset
   207
    
469
a9c1082bbd8f hggtk/serve: add 'Configure' toolbar button
Steve Borho <steve@borho.org>
parents: 459
diff changeset
   208
    def _on_conf_clicked(self, *args):
a9c1082bbd8f hggtk/serve: add 'Configure' toolbar button
Steve Borho <steve@borho.org>
parents: 459
diff changeset
   209
        from thgconfig import ConfigDialog
872
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   210
        dlg = ConfigDialog(self._root, True)
469
a9c1082bbd8f hggtk/serve: add 'Configure' toolbar button
Steve Borho <steve@borho.org>
parents: 459
diff changeset
   211
        dlg.show_all()
516
16a3c8dc9c1d hggtk/thgconfig: move focus_field and new_path into class methods
Steve Borho <steve@borho.org>
parents: 513
diff changeset
   212
        dlg.focus_field('web.name')
469
a9c1082bbd8f hggtk/serve: add 'Configure' toolbar button
Steve Borho <steve@borho.org>
parents: 459
diff changeset
   213
        dlg.run()
a9c1082bbd8f hggtk/serve: add 'Configure' toolbar button
Steve Borho <steve@borho.org>
parents: 459
diff changeset
   214
        dlg.hide()
889
3bc868f2b133 hggtk/serve: set web.name into ui object, cleanup config usage
Steve Borho <steve@borho.org>
parents: 883
diff changeset
   215
        self._get_config()
469
a9c1082bbd8f hggtk/serve: add 'Configure' toolbar button
Steve Borho <steve@borho.org>
parents: 459
diff changeset
   216
351
a7d5afeb5824 hggtk: refactor serve dialog to use toolbar
TK Soh <teekaysoh@yahoo.com>
parents: 326
diff changeset
   217
    def _start_server(self):
309
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
   218
        # gather input data
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
   219
        try:
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
   220
            port = int(self._port_input.get_text())
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
   221
        except:
459
35252de5daee hggtk/serve.py: respect web.port configuration
Steve Borho <steve@borho.org>
parents: 455
diff changeset
   222
            try: port = int(self.defport)
872
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   223
            except: port = 8000
459
35252de5daee hggtk/serve.py: respect web.port configuration
Steve Borho <steve@borho.org>
parents: 455
diff changeset
   224
            error_dialog("Invalid port 2048..65535", "Defaulting to " +
35252de5daee hggtk/serve.py: respect web.port configuration
Steve Borho <steve@borho.org>
parents: 455
diff changeset
   225
                    self.defport)
309
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
   226
        
872
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   227
        global gservice
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   228
        gservice = None
325
f3f9733eec37 hggtk: Pass repo to serve dialog, fixup web.name
Steve Borho <steve@borho.org>
parents: 324
diff changeset
   229
872
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   230
        q = Queue.Queue()
889
3bc868f2b133 hggtk/serve: set web.name into ui object, cleanup config usage
Steve Borho <steve@borho.org>
parents: 883
diff changeset
   231
        args = [self._root, q, 'serve', '--verbose', '--name', self.webname,
883
25adeacce00e hggtk/serve: provide default web.name if not specified
Steve Borho <steve@borho.org>
parents: 873
diff changeset
   232
                '--port', str(port)]
872
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   233
        thread = threading.Thread(target=hglib.hgcmd_toq, args=args)
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   234
        thread.start()
309
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
   235
873
fb3a19c45786 hggtk/serve: fixes for timing sensitive bugs
Steve Borho <steve@borho.org>
parents: 872
diff changeset
   236
        while not gservice or not hasattr(gservice, 'httpd'):
872
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   237
            time.sleep(0.1)
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   238
        self._url = 'http://%s:%d/' % (gservice.httpd.addr, port)
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   239
        gobject.timeout_add(10, self.process_queue, q)
351
a7d5afeb5824 hggtk: refactor serve dialog to use toolbar
TK Soh <teekaysoh@yahoo.com>
parents: 326
diff changeset
   240
        
a7d5afeb5824 hggtk: refactor serve dialog to use toolbar
TK Soh <teekaysoh@yahoo.com>
parents: 326
diff changeset
   241
    def _stop_server(self):
872
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   242
        if gservice and not gservice.stopped:
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   243
            gservice.stop()
309
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
   244
873
fb3a19c45786 hggtk/serve: fixes for timing sensitive bugs
Steve Borho <steve@borho.org>
parents: 872
diff changeset
   245
    def flush(self, *args):
fb3a19c45786 hggtk/serve: fixes for timing sensitive bugs
Steve Borho <steve@borho.org>
parents: 872
diff changeset
   246
        pass
fb3a19c45786 hggtk/serve: fixes for timing sensitive bugs
Steve Borho <steve@borho.org>
parents: 872
diff changeset
   247
309
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
   248
    def write(self, msg, append=True):
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
   249
        msg = unicode(msg, 'iso-8859-1')
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
   250
        if append:
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
   251
            enditer = self.textbuffer.get_end_iter()
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
   252
            self.textbuffer.insert(enditer, msg)
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
   253
        else:
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
   254
            self.textbuffer.set_text(msg)
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
   255
872
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   256
    def process_queue(self, q):
309
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
   257
        """
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
   258
        Handle all the messages currently in the queue (if any).
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
   259
        """
872
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   260
        while q.qsize():
309
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
   261
            try:
872
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   262
                msg = q.get(0)
309
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
   263
                self.write(msg)
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
   264
            except Queue.Empty:
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
   265
                pass
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
   266
872
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   267
        if gservice and gservice.stopped:
368
27d438da221d hggtk/serve: add button to view web server using default browser
TK Soh <teekaysoh@yahoo.com>
parents: 351
diff changeset
   268
            self._set_button_states()
309
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
   269
            return False # Stop polling this function
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
   270
        else:
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
   271
            return True
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
   272
        
872
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   273
def thg_serve(ui, repo, **opts):
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   274
    class service:
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   275
        def init(self):
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   276
            self.stopped = True
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   277
            util.set_signal_handler()
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   278
            try:
889
3bc868f2b133 hggtk/serve: set web.name into ui object, cleanup config usage
Steve Borho <steve@borho.org>
parents: 883
diff changeset
   279
                if 'name' in opts:
3bc868f2b133 hggtk/serve: set web.name into ui object, cleanup config usage
Steve Borho <steve@borho.org>
parents: 883
diff changeset
   280
                    ui.setconfig('web', 'name', opts['name'])
872
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   281
                self.httpd = server.create_server(ui, repo)
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   282
            except socket.error, inst:
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   283
                raise util.Abort(_('cannot start server: ') + inst.args[1])
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   284
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   285
            if not ui.verbose: return
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   286
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   287
            if self.httpd.port != 80:
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   288
                ui.status(_('listening at http://%s:%d/\n') %
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   289
                          (self.httpd.addr, self.httpd.port))
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   290
            else:
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   291
                ui.status(_('listening at http://%s/\n') % self.httpd.addr)
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   292
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   293
        def stop(self):
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   294
            self.stopped = True
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   295
            # issue request to trigger handle_request() and quit
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   296
            addr = '%s:%d' % (self.httpd.addr, self.httpd.port)
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   297
            conn = httplib.HTTPConnection(addr)
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   298
            conn.request("GET", "/")
873
fb3a19c45786 hggtk/serve: fixes for timing sensitive bugs
Steve Borho <steve@borho.org>
parents: 872
diff changeset
   299
            res = conn.getresponse()
fb3a19c45786 hggtk/serve: fixes for timing sensitive bugs
Steve Borho <steve@borho.org>
parents: 872
diff changeset
   300
            res.read()
fb3a19c45786 hggtk/serve: fixes for timing sensitive bugs
Steve Borho <steve@borho.org>
parents: 872
diff changeset
   301
            conn.close()
309
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
   302
872
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   303
        def run(self):
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   304
            self.stopped = False
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   305
            while not self.stopped:
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   306
                self.httpd.handle_request()
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   307
            self.httpd.server_close() # release port
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   308
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   309
    global gservice
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   310
    gservice = service()
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   311
    cmdutil.service(opts, initfn=gservice.init, runfn=gservice.run)
309
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
   312
872
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   313
thg_serve_cmd =  {"^serve":
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   314
        (thg_serve,
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   315
         [('A', 'accesslog', '', _('name of access log file to write to')),
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   316
          ('d', 'daemon', None, _('run server in background')),
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   317
          ('', 'daemon-pipefds', '', _('used internally by daemon mode')),
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   318
          ('E', 'errorlog', '', _('name of error log file to write to')),
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   319
          ('p', 'port', 0, _('port to use (default: 8000)')),
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   320
          ('a', 'address', '', _('address to use')),
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   321
          ('n', 'name', '',
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   322
           _('name to show in web pages (default: working dir)')),
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   323
          ('', 'webdir-conf', '', _('name of the webdir config file'
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   324
                                    ' (serve more than one repo)')),
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   325
          ('', 'pid-file', '', _('name of file to write process ID to')),
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   326
          ('', 'stdio', None, _('for remote clients')),
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   327
          ('t', 'templates', '', _('web templates to use')),
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   328
          ('', 'style', '', _('template style to use')),
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   329
          ('6', 'ipv6', None, _('use IPv6 in addition to IPv4')),
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   330
          ('', 'certificate', '', _('SSL certificate file'))],
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   331
         _('hg serve [OPTION]...'))}
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   332
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   333
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   334
def run(cwd='', root='', **opts):
8444ce62c03e hggtk/serve: use internal stoppable serve command
Steve Borho <steve@borho.org>
parents: 853
diff changeset
   335
    dialog = ServeDialog(cwd, root)
401
9ab309fbc25c hggtk: gtk threads and hgproc cleanup
Steve Borho <steve@borho.org>
parents: 400
diff changeset
   336
    dialog.show_all()
9ab309fbc25c hggtk: gtk threads and hgproc cleanup
Steve Borho <steve@borho.org>
parents: 400
diff changeset
   337
    gtk.gdk.threads_init()
9ab309fbc25c hggtk: gtk threads and hgproc cleanup
Steve Borho <steve@borho.org>
parents: 400
diff changeset
   338
    gtk.gdk.threads_enter()
9ab309fbc25c hggtk: gtk threads and hgproc cleanup
Steve Borho <steve@borho.org>
parents: 400
diff changeset
   339
    gtk.main()
9ab309fbc25c hggtk: gtk threads and hgproc cleanup
Steve Borho <steve@borho.org>
parents: 400
diff changeset
   340
    gtk.gdk.threads_leave()
309
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
   341
    
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
   342
if __name__ == "__main__":
567558b530c8 hggtk: Add an hg serve dialog
Steve Borho <steve@borho.org>
parents:
diff changeset
   343
    import sys
401
9ab309fbc25c hggtk: gtk threads and hgproc cleanup
Steve Borho <steve@borho.org>
parents: 400
diff changeset
   344
    opts = {}
9ab309fbc25c hggtk: gtk threads and hgproc cleanup
Steve Borho <steve@borho.org>
parents: 400
diff changeset
   345
    opts['cwd'] = os.getcwd()
9ab309fbc25c hggtk: gtk threads and hgproc cleanup
Steve Borho <steve@borho.org>
parents: 400
diff changeset
   346
    opts['root'] = len(sys.argv) > 1 and sys.argv[1] or ''
9ab309fbc25c hggtk: gtk threads and hgproc cleanup
Steve Borho <steve@borho.org>
parents: 400
diff changeset
   347
    run(**opts)