[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: vc-update for bzr etc.
From: |
Dan Nicolaescu |
Subject: |
Re: vc-update for bzr etc. |
Date: |
Mon, 22 Nov 2010 01:52:14 -0500 |
User-agent: |
Gnus/5.11 (Gnus v5.11) Emacs/22.1 (gnu/linux) |
Chong Yidong <address@hidden> writes:
> Stefan Monnier <address@hidden> writes:
>
>> VC tries to present a uniform UI and that is good, but trying to impose
>> a uniform semantics to all commands is asking too much. So I think it's
>> perfectly OK for vc-pull/update to do "bzr pull" for Bzr and
>> "git pull" for Git, even if they don't do exactly the same thing.
>
> Fair enough. Here's an updated patch. I renamed the new operation
> vc-BACKEND-update-branch, and vc-update uses it preferentially if it
> exists (falling back on the old merge-news operation if not). For
> vc-bzr-update-branch, it calls "bzr update" for bound branchs and
> "bzr pull" for other branches. Passing a prefix arg to vc-update causes
> it to prompt for arguments to bzr.
>
> WDYT?
IMHO:
It looks like the future is pull/push.
If vc-pull is supported then vc-update can either use vc-pull directly
or just issue an error directing the users to use vc-pull.
It does not look like a wise investment to go in the direction of
expanding support for vc-update.
>
>
> *** lisp/vc/vc-bzr.el 2010-11-09 20:07:10 +0000
> --- lisp/vc/vc-bzr.el 2010-11-22 04:29:26 +0000
> ***************
> *** 236,241 ****
> --- 236,280 ----
> (when rootdir
> (file-relative-name filename* rootdir))))
>
> + (defun vc-bzr-update-branch (prompt)
> + "Update the current Bzr branch.
> + If it is a bound branch, run \"bzr update\".
> + Otherwise, run \"bzr pull\"."
> + (let* ((rootdir (vc-bzr-root default-directory))
> + (bound ;; Whether the branch is bound.
> + (with-temp-buffer
> + (insert-file-contents
> + (expand-file-name ".bzr/branch/branch.conf" rootdir))
> + (goto-char (point-min))
> + (re-search-forward "bound *= *True" nil t)))
> + (command (if bound "update" "pull"))
> + (vc-bzr-program vc-bzr-program)
> + (args nil)
> + buf)
> + ;; If PROMPT is given, ask the user for the exact command.
> + (when prompt
> + (setq args
> + (split-string
> + (read-shell-command
> + "Run bzr (like this): "
> + (concat vc-bzr-program " " command))
> + " " t))
> + (if (< (length args) 2)
> + (error "Invalid bzr command")
> + (setq vc-bzr-program (car args)
> + command (nth 1 args)
> + args (cddr args))))
> + ;; Run asynchronously, ouputting to *vc-update* buffer.
> + (setq buf (get-buffer-create "*vc-update*"))
> + (with-current-buffer buf
> + (goto-char (point-max))
> + (unless (eq (point) (point-min))
> + (insert "\n"))
> + (insert (format "Running \"%s %s\" for \"%s\"...\n"
> + vc-bzr-program command rootdir))
> + (vc-bzr-command command t 'async nil args))
> + (display-buffer buf)))
> +
> (defun vc-bzr-status (file)
> "Return FILE status according to Bzr.
> Return value is a cons (STATUS . WARNING), where WARNING is a
>
> === modified file 'lisp/vc/vc.el'
> *** lisp/vc/vc.el 2010-11-12 13:44:46 +0000
> --- lisp/vc/vc.el 2010-11-22 03:56:27 +0000
> ***************
> *** 2274,2308 ****
> (define-obsolete-function-alias 'vc-revert-buffer 'vc-revert "23.1")
>
> ;;;###autoload
> ! (defun vc-update ()
> ! "Update the current fileset's files to their tip revisions.
> ! For each one that contains no changes, and is not locked, then this simply
> ! replaces the work file with the latest revision on its branch. If the file
> ! contains changes, and the backend supports merging news, then any recent
> ! changes from the current branch are merged into the working file."
> ! (interactive)
> ! (let* ((vc-fileset (vc-deduce-fileset))
> (backend (car vc-fileset))
> (files (cadr vc-fileset)))
> ! (save-some-buffers ; save buffers visiting files
> ! nil (lambda ()
> ! (and (buffer-modified-p)
> ! (let ((file (buffer-file-name)))
> ! (and file (member file files))))))
> ! (dolist (file files)
> ! (if (vc-up-to-date-p file)
> ! (vc-checkout file nil t)
> ! (if (eq (vc-checkout-model backend (list file)) 'locking)
> ! (if (eq (vc-state file) 'edited)
> ! (error "%s"
> ! (substitute-command-keys
> ! "File is locked--type \\[vc-revert] to discard
> changes"))
> ! (error "Unexpected file state (%s) -- type %s"
> ! (vc-state file)
> ! (substitute-command-keys
> ! "\\[vc-next-action] to correct")))
> ! (vc-maybe-resolve-conflicts
> ! file (vc-call-backend backend 'merge-news file)))))))
>
> (defun vc-version-backup-file (file &optional rev)
> "Return name of backup file for revision REV of FILE.
> --- 2274,2320 ----
> (define-obsolete-function-alias 'vc-revert-buffer 'vc-revert "23.1")
>
> ;;;###autoload
> ! (defun vc-update (&optional arg)
> ! "Update the current fileset or branch.
> ! On distributed version control systems, this updates the branch.
> ! With prefix ARG, prompt for an argument list for the command.
> !
> ! On all other version control systems, update the files in the
> ! current fileset to their tip revisions. For each file that
> ! contains no changes, and is not locked, then this simply replaces
> ! the work file with the latest revision on its branch. If the
> ! file contains changes, and the backend supports merging news,
> ! then any recent changes from the current branch are merged into
> ! the working file."
> ! (interactive "P")
> ! (when buffer-file-name (vc-buffer-sync t))
> ! (let* ((vc-fileset (vc-deduce-fileset t))
> (backend (car vc-fileset))
> (files (cadr vc-fileset)))
> ! (cond
> ! ;; If an update-branch operation is defined, use it.
> ! ((or arg (vc-find-backend-function backend 'update-branch))
> ! (vc-call-backend backend 'update-branch arg))
> ! ;; If VCS has `merge-news' functionality (CVS and SVN), use it.
> ! ((and (vc-find-backend-function backend 'merge-news)
> ! (not arg))
> ! (save-some-buffers ; save buffers visiting files
> ! nil (lambda ()
> ! (and (buffer-modified-p)
> ! (let ((file (buffer-file-name)))
> ! (and file (member file files))))))
> ! (dolist (file files)
> ! (if (vc-up-to-date-p file)
> ! (vc-checkout file nil t)
> ! (vc-maybe-resolve-conflicts
> ! file (vc-call-backend backend 'merge-news file)))))
> ! ;; For a locking VCS, check out each file.
> ! ((eq (vc-checkout-model backend files) 'locking)
> ! (dolist (file files)
> ! (if (vc-up-to-date-p file)
> ! (vc-checkout file nil t))))
> ! (t
> ! (error "VC update is unsupported for `%s'" backend)))))
>
> (defun vc-version-backup-file (file &optional rev)
> "Return name of backup file for revision REV of FILE.
- Re: vc-update for bzr etc., (continued)
- Re: vc-update for bzr etc., Chong Yidong, 2010/11/21
- Re: vc-update for bzr etc., Stefan Monnier, 2010/11/21
- Re: vc-update for bzr etc., Stephen J. Turnbull, 2010/11/21
- Re: vc-update for bzr etc., Thien-Thi Nguyen, 2010/11/22
- Re: vc-update for bzr etc., Stephen J. Turnbull, 2010/11/22
- Re: vc-update for bzr etc., Stefan Monnier, 2010/11/22
- Re: vc-update for bzr etc., Chong Yidong, 2010/11/22
- Re: vc-update for bzr etc., Stephen J. Turnbull, 2010/11/23
- Re: vc-update for bzr etc., Stefan Monnier, 2010/11/23
- Re: vc-update for bzr etc., Chong Yidong, 2010/11/21
- Re: vc-update for bzr etc.,
Dan Nicolaescu <=
- Re: vc-update for bzr etc., Stefan Monnier, 2010/11/22
- Re: vc-update for bzr etc., Eli Zaretskii, 2010/11/22
- Re: vc-update for bzr etc., Stefan Monnier, 2010/11/22
- Re: vc-update for bzr etc., Chong Yidong, 2010/11/22
- Re: vc-update for bzr etc., Stefan Monnier, 2010/11/23
- Re: vc-update for bzr etc., Chong Yidong, 2010/11/23
- Re: vc-update for bzr etc., Dan Nicolaescu, 2010/11/23
- Re: vc-update for bzr etc., Dan Nicolaescu, 2010/11/23
- Re: vc-update for bzr etc., Chong Yidong, 2010/11/23
- Re: vc-update for bzr etc., Stefan Monnier, 2010/11/23