summaryrefslogtreecommitdiff
path: root/lib/choose_repository.tcl
AgeCommit message (Collapse)AuthorFilesLines
2011-02-06git-gui: instead of defaulting to home directory use working directoryLibravatar Heiko Voigt1-11/+3
When starting git gui in a non-git directory it presents the user a dialog which asks to create, clone or open a repository. The filedialogs used to choose the path(s) would always default to the home directory of the user. This patch changes this behavior and uses the current working directory in which git gui was started as default. This is useful in various cases. First being that the user starts the gui in some directory and can go search to create, open or clone a repository from there. Another use case is that tools like filemanager context menues can transport a natural default when selected from a folder. Users who like to have their home folder as a default can fall back on starting git gui with its working directory set to the home folder. Signed-off-by: Heiko Voigt <hvoigt@hvoigt.net> Signed-off-by: Pat Thoyts <patthoyts@users.sourceforge.net>
2010-07-30git-gui: Avoid using the <<Copy>> binding as a menu accelerator on win32Libravatar Pat Thoyts1-3/+8
On Windows the Control-C binding is used to copy and is mapped to the Tk virtual event <<Copy>>. In the initial git-gui dialog this is also bound as an accelerator for the Clone menu item. The effect is that both bindings run, copying the text but resetting the clone page or switching to the clone page when the user tries to copy text from one of the entry fields. This patch avoids this by using Control-L instead for Windows only. Signed-off-by: Pat Thoyts <patthoyts@users.sourceforge.net>
2010-01-27git-gui: use themed tk widgets with Tk 8.5Libravatar Pat Thoyts1-50/+44
This patch enables the use of themed Tk widgets with Tk 8.5 and above. These make a significant difference on Windows in making the application appear native. On Windows and MacOSX ttk defaults to the native look as much as possible. On X11 the user may select a theme using the TkTheme XRDB resource class by adding an line to the .Xresources file. The set of installed theme names is available using the Tk command 'ttk::themes'. The default on X11 is similar to the current un-themed style - a kind of thin bordered motif look. A new git config variable 'gui.usettk' may be set to disable this if the user prefers the classic Tk look. Using Tk 8.4 will also avoid the use of themed widgets as these are only available since 8.5. Some support is included for Tk 8.6 features (themed spinbox and native font chooser for MacOSX and Windows). Signed-off-by: Pat Thoyts <patthoyts@users.sourceforge.net> Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
2010-01-23git-gui: Keep repo_config(gui.recentrepos) and .gitconfig in syncLibravatar Christopher Beelby1-0/+4
When the number of recent repo's gets to ten there can be a situation where an item is removed from the .gitconfig file via a call to git config --unset, but the internal representation of that file (repo_config(gui.recentrepo)) is not updated. Then a subsequent attempt to remove an item from the list fails because git-gui attempts to call --unset on a value that has already been removed. This leads to duplicates in the .gitconfig file, which then also cause errors if the git-gui tries to --unset them (rather than using --unset-all. --unset-all is not used because it is not expected that duplicates should ever be allowed to exist.) When loading the list of recent repositories (proc _get_recentrepos) if a repo in the list is not considered a valid git reposoitory then we should go ahead and remove it so it doesn't take up a slot in the list (since we limit to 10 items). This will prevent a bunch of invalid entries in the list (which are not shown) from making valid entries dissapear off the list even when there are less than ten valid entries. See: http://code.google.com/p/msysgit/issues/detail?id=362 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
2009-04-08git-gui: run post-checkout hook after cloneLibravatar Jens Lehmann1-1/+28
git-gui is using "git-read-tree -u" when cloning which doesn't invoke the post-checkout hook as a plain git-clone would. So git-gui must call the hook itself. Signed-off-by: Jens Lehmann <Jens.Lehmann@web.de> Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
2009-03-16git-gui: don't hide the Browse button when resizing the repo chooserLibravatar Markus Heidelberg1-0/+4
Rather shrink the input field for "Create New Repository" and "Open Existing Repository" as it's already done for "Clone Existing Repository". Signed-off-by: Markus Heidelberg <markus.heidelberg@web.de> Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
2008-11-11git-gui: Add the Show SSH Key item to the clone dialog.Libravatar Alexander Gavrilov1-0/+6
The user might need to see the key before cloning a repository. This patch makes the relevant menu item available in the Select Repository/Clone dialog. Signed-off-by: Alexander Gavrilov <angavrilov@gmail.com> Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
2008-09-30git-gui: Make input boxes in init/clone/open dialogs consistentLibravatar Petr Baudis1-4/+8
Before, the input boxes would not be sunken and would have larger border, which is inconsistent with the rest of the inputboxes for repository locations in the git-gui UI. Signed-off-by: Petr Baudis <petr.baudis@novartis.com> Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
2008-09-30git-gui: Avoid using the term URL when specifying repositoriesLibravatar Petr Baudis1-2/+2
Instead, 'Location' is used to label such inputs; in the Clone dialog, 'Source' and 'Target' are also introduced to further clarify the situation. The intent is to increase GUI consistency in the case location templates (upcoming) are used - then, other locators than URL may be used. Signed-off-by: Petr Baudis <petr.baudis@novartis.com> Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
2008-05-26git-gui: Vertically align textboxes with labelsLibravatar Twiinz1-6/+2
In git-gui after clicking either on 'Create New Repository' or 'Open Existing Repository' the form elements aren't centered like they are pretty much everywhere else in the app. At least when ran on a mac, haven't checked on other platforms. Using grid instead of pack seems to fix this. Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
2008-03-15git-gui: Don't translate the special Apple menuLibravatar Shawn O. Pearce1-1/+1
Peter Karlsson pointed out there is no value in translating the string "Apple", as this is used as the dummy label for the Apple menu on Mac OS X systems. The Apple menu is actually not the menu with the Apple corporate logo, but the menu next to it, which shows the name of the application and is typically called the application menu. Most users of git-gui see this menu titled as "Git Gui". The actual label of this menu comes from our Info.plist file and cannot be specified by any other means. Translating this string in the Tcl PO files is not necessary. Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
2008-02-22git-gui: Focus insertion point at end of strings in repository chooserLibravatar Shawn O. Pearce1-0/+4
When selecting a local working directory for a new repository or a location to clone an existing repository into we now set the insert point at the end of the selected path, allowing the user to type in any additional parts of the path if they so desire. Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
2008-01-16git-gui: Allow 'Create New Repository' on existing directoriesLibravatar Shawn O. Pearce1-28/+22
Often users setup a few source files and get a project rolling before they create a Git repository for it. In such cases the core Git tools allow users to initialize a new repository by simply running `git init` at the desired root level directory. We need to allow the same situation in git-gui; if the user is trying to make a new repository we should let them do that to any location they chose. If the directory already exists and already has files contained within it we still should allow the user to create a repository there. However we still need to disallow creating a repository on top of an existing repository. Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
2007-10-12git-gui: Collapse $env(HOME) to ~/ in recent repositories on WindowsLibravatar Shawn O. Pearce1-2/+6
Apparently native Tcl/Tk on Windows is using \ as the return value from [file separator] but [file normalize] on that same system is using / rather than \ to represent a directory separator. I really think that is nuts, but its what is happening. So we can actually just hardcode our separator to / as all systems we support (Windows, Mac OS X, UNIX) use /. Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
2007-10-12git-gui: Support cloning Cygwin based work-dirsLibravatar Shawn O. Pearce1-7/+37
If the user tries to clone a Git repository that is actually a workdir of another repository (by way of contrib git-new-workdir) then the contents of .git is a series of Windows .lnk files which Tcl can't read if this is a native Tcl process. To read the real objects directory we need to resolve the link to that location. Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
2007-10-12git-gui: Bind n/c/o accelerators in repository chooserLibravatar Shawn O. Pearce1-0/+6
On Windows we need to actually setup binds for the accelerator keys, otherwise the OS doesn't respond to them when the user presses the key combinations. Apparently we automatically get these on Mac OS X when we configure the menu commands, but not on Windows. Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
2007-10-12git-gui: Disable the text widget in the repository chooserLibravatar Shawn O. Pearce1-0/+2
Although we are using a text widget here we really do not want the end-user to be able to modify the text it displays. So we need to disable it. Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
2007-10-12git-gui: Fix bind errors when switching repository chooser panelsLibravatar Shawn O. Pearce1-0/+6
We need to remove any variable traces we may have installed when the panel is destroyed as the trace may attempt to use a widget that no longer exists on this panel. Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
2007-10-12git-gui: Offer repository management features in menu barLibravatar Shawn O. Pearce1-6/+49
When we show the repository chooser as the primary toplevel (".") we now offer the major choices not just on the window as hyperlinks but they also now are shown in the Repository menu, including the recent repository list. Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
2007-10-12git-gui: Change repository browser radio buttons to hyperlinksLibravatar Shawn O. Pearce1-27/+34
Making a user click twice to select which action they want to perform when starting git-gui is just wasting their time. Clicking once on a radio button and then clicking again on the "Next >" button is quite unnecessary. Since the recent repository list is shown as a list of hyperlinks we now offer the 3 basic startup actions as hyperlinks. Clicking on a link will immediately jump to the next UI panel, saving the user time as they don't need to click an additional button. Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
2007-10-12git-gui: offer a list of recent repositories on startupLibravatar Steffen Prohaska1-0/+82
If git-gui is started outside a work tree the repository chooser will offer a list of recently opened repositories. Clicking on any list entry directly opens the repository. The list of recently opened repositories is stored in the config as the multi-valued option gui.recentrepo. If the list grows beyond 10 entries it will be truncated by removing one of the older entries. Only repositories that are opened through the repository chooser will get added to the recent list. Repositories opened from the shell will not yet be added to the recent list, as users are likely to have a way to easily return to the same directory via their shell. [sp: This is actually a combined work from both Steffen and myself. Most of the ideas are Steffen's, as is the basic outline of the code, but any outstanding bugs are entirely my fault.] Signed-off-by: Steffen Prohaska <prohaska@zib.de> Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
2007-10-10git-gui: Refactor Henrik Nyh's logo into its own procedureLibravatar Shawn O. Pearce1-38/+1
By moving the logo into its own procedure we can use it in multiple locations within the UI, but still load it only if the logo is going to be used by the application. Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
2007-09-26git-gui: Make the status bar easier to read in the setup wizardLibravatar Shawn O. Pearce1-2/+2
The setup wizard looks better if we layout the progress bar as two lines: the first line holds the message text and our text formatting of the progress while the second line holds the bar itself. Both extend the full width of the window and we try to pad out the message text so the window doesn't expand when the completed progress number jumps to the next order of magnitude. This change required updating the progress meter format string to allow the application to supply the precision. So we also are updating all of the translations at once to use the newer formatting string. Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
2007-09-26git-gui: Switch the git-gui logo to Henrik Nyh's logoLibravatar Shawn O. Pearce1-22/+41
Henrik came up with this alternative logo for gitweb and posted it on his blog: http://henrik.nyh.se/2007/06/alternative-git-logo-and-favicon The msysGit port uses his logo within some of their components, and frankly it looks better here in git-gui for our repository setup wizard screen. The logo fits quite nicely along the left edge of our window, leaving significantly more vertical space for things like the git-fetch console output. Because the logo changes the layout charateristics of the setup window I also needed to adjust some of the padding for our widgets and stop using a fixed width window size. We now let Tk compute the correct size of the main window whenever the layout changes, and drop the window into roughly the upper left 1/3 of the desktop so its not quite centered but is likely to be far enough away from any sort of task bars/menu bars/docks that the user may have along any edge of the screen. Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
2007-09-24git-gui: Copy objects/info/alternates during standard cloneLibravatar Shawn O. Pearce1-0/+26
If the source repository is using an objects/info/alternates file we need to copy the file to our new repository so that it can access any objects that won't be copied/hardlinked as they are stored in the alternate location. We explicitly resolve all paths in the objects/info/alternates as relative to the source repository but then convert them into an absolute path for the new clone. This allows the new clone to access the exact same locaton as the source repository, even if relative paths had been used before. Under Cygwin we assume that Git is Cygwin based and that the paths in objects/info/alternates must be valid Cygwin UNIX paths, so we need to run `cygpath --unix` on each line in the alternate list. Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
2007-09-24git-gui: Keep the UI responsive while counting objects in cloneLibravatar Shawn O. Pearce1-5/+25
If we are doing a "standard" clone by way of hardlinking the objects (or copying them if hardlinks are not available) the UI can freeze up for a good few seconds while Tcl scans all of the object directories. This is espeically noticed on a Windows system when you are working off network shares and need to wait for both the NT overheads and the network. We now show a progress bar as we count the objects and build our list of things to copy. This keeps the user amused and also makes sure we run the Tk event loop often enough that the window can still be dragged around the desktop. Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
2007-09-24git-gui: Don't bother showing OS error message about hardlinksLibravatar Shawn O. Pearce1-4/+1
If we failed to create our test hardlink for the first object we need to link/copy then the only recourse we have is to make a copy of the objects. Users don't really need to know the OS details about why the hardlink failed as its usually because they are crossing filesystem boundaries. Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
2007-09-23git-gui: Deiconify startup wizard so it raises to the topLibravatar Johannes Schindelin1-0/+1
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
2007-09-23git-gui: Allow users to choose/create/clone a repositoryLibravatar Shawn O. Pearce1-0/+838
If we are started outside of a git repository than it is likely the user started us from some sort of desktop shortcut icon in the operating system. In such a case the user is expecting us to prompt them to locate the git repository they want to work on, or to help them make a new repository, or to clone one from an existing location. This is a very simple wizard that offers the user one of these three choices. When we clone a repository we always use the name `master` in the local repository, even if the remote side does not appear to point to that name. I chose this as a policy decision. Much of the Git documentation talks about `master` being the default branch in a repository and that's what git-init does too. If the remote side doesn't call its default branch `master` most users just don't care, they just want to use Git the way the documentation describes. Rather than relying on the git-clone Porcelain that ships with git we build the new repository ourselves and then obtain content by git-fetch. This technique simplifies the entire clone process to roughly: `git init && git fetch && git pull`. Today we use three passes with git-fetch; the first pass gets us the bulk of the objects and the branches, the second pass gets us the tags, and the final pass gets us the current value of HEAD to initialize the default branch. If the source repository is on the local disk we try to use a hardlink to connect the objects into the new clone as this can be many times faster than copying the objects or packing them and passing the data through a pipe to index-pack. Unlike git-clone we stick to pure Tcl [file link -hard] operation thus avoiding the need to fork a cpio process to setup the hardlinks. If hardlinks do not appear to be supported (e.g. filesystem doesn't allow them or we are crossing filesystem boundaries) we use file copying instead. Signed-off-by: Shawn O. Pearce <spearce@spearce.org>