108

When I add a PPA and I want to install some of its content, it is quite annoying to re-update all my apt list using apt-get update.

Is it instead possible to only sync the content of a given repository?

  • 1
    Starting from wily, you could just use add-apt-repository -u – Treviño Jul 17 '15 at 22:34
  • There is no -u on Ubuntu (15.x) Vivid as far as I can tell. – kenorb Nov 14 '15 at 19:53
  • @Treviño It isn't mentioned in the Wily manpage: manpages.ubuntu.com/manpages/wily/en/man1/… Is it documented elsewhere? – muru Feb 11 '16 at 20:26
  • @muru I think that has to be fixed, it's only mentioned on add-apt-repository --help. Please open a bug asking to fix the manpage. – Treviño Feb 19 '16 at 0:26
  • @Treviño @muru FYI, the -u functionality was removed since 18.04. See askubuntu.com/questions/65245/… – wisbucky Apr 10 at 22:44
82

yes, apt-get can do that, and can do it in a nice way.

  1. Append following to ~/.bash_funcs

    update-repo() {
        for source in "$@"; do
            sudo apt-get update -o Dir::Etc::sourcelist="sources.list.d/${source}" \
            -o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0"    
        done
    }
    
  2. Append following to ~/.bashrc

    if [ -f $HOME/.bash_funcs ]; then
    .  $HOME/.bash_funcs
    fi
    
  3. Append following to ~/.bash_completion

    # Debian user-defined completion                             -*- shell-script -*-
    
    _ppa_lists(){
        local cur
        _init_completion || return
    
        COMPREPLY=( $( find /etc/apt/sources.list.d/ -name "*$cur*.list" \
    -exec basename {} \; 2> /dev/null ) )
        return 0
    } &&
    complete -F _ppa_lists update-repo
    
  4. Then source the files

    . ~/.bashrc
    . ~/.bash_completion
    
  5. Done and start to fire it

    update-repo <tab> <tab>
    

You can update a single ppa repository without having to update whole apt source, with implement of bash-completion.

41

If the repository is configured in a specific file in the directory /etc/apt/sources.list.d/, say myrepo.list, you can update that single repository with the command:

sudo apt-get update -o Dir::Etc::sourcelist="sources.list.d/myrepo.list" \
    -o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0"

Nevertheless this is not very convenient.
This can be simplified defining a bash function

update_repo() {
    sudo apt-get update -o Dir::Etc::sourcelist="sources.list.d/$1.list" \
        -o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0"
}

so that you can simply run

update_repo myrepo
  • I've checked this again, but it doesn't work if then you want to install a package that has some unresolved dependency on another repository (also in the main archive) – Treviño Nov 13 '11 at 19:25
  • 1
    can you explain what does '-' mean in sourceparts config? – Sajuuk Apr 3 at 2:14
  • I think '-' just a dummy way to tell sourceparts should not be used. See github.com/Debian/apt/blob/master/apt-pkg/sourcelist.cc#L313 . I could be wrong though, couldn't find a proper doc explaining the '-'. – randomness Apr 9 at 18:00
12

Y PPA Manager comes with a command line tool called update-ppa that lets you update a single PPA.

For example:

sudo update-ppa ppa:nilarimogard/webupd8

Also, when adding a PPA through Y PPA Manager, the PPA source is automatically updated (only for that PPA). In a future version, there's going to be a GUI to manually update single PPAs as well.

More information about Y PPA Manager, HERE.

  • 5
    sudo add-apt-repository ppa:webupd8team/y-ppa-manager then sudo apt-get update and finally sudo apt-get install y-ppa-manager – mchid Nov 8 '14 at 5:16
8

To update a specific repository, use -o, e.g.:

apt-get update -o Dir::Etc::sourcelist=/path/to/repo.list

Here is a one-liner updating only recently added apt repository

find /etc/apt/sources.list.d -type f -name '*.list' -exec sudo apt-get update -o Dir::Etc::sourcelist="{}" ';'

It's much quicker than updating all repositories, especially during VM provisioning after adding new.

  • 3
    I think this updates everything found in /path/to – John Bachir Jul 30 '16 at 2:33
  • @JohnBachir Exactly. – Roman Mar 29 '18 at 15:38
1

The -u option was added in 15.10. From 15.10 to 17.10, you could use -u to automatically update only the specific repo you are adding:

add-apt-repository -u my-ppa

The silly thing is that this option was not added to man until 18.04 (it was documented in add-apt-repository --help, however). But in 18.04, this functionality was removed! (Again, not in man, but you can see in add-apt-repository --help).

In 18.04, the update functionality was changed to always do a full apt-get update after add-apt-repository. The -u option was effectively removed. It remains there for legacy syntax, but it is always set to options.update = False. In 18.04, you do have the option of -n, --no-update, which is like the old behavior. But it's all or nothing, you cannot update a single repo since 18.04.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.