<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Code on Launchpad Blog</title>
    <link>https://blog.launchpad.net/categories/code/</link>
    <description>News and updates from the Launchpad team</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Tue, 08 Sep 2026 10:32:27 +0000</lastBuildDate>
    <atom:link href="https://blog.launchpad.net/feed/categories/code/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>Review merge proposals in VS Code</title>
      <link>https://blog.launchpad.net/general/review-merge-proposals-in-vs-code/</link>
      <pubDate>Tue, 08 Sep 2026 10:32:27 +0000</pubDate>
      <dc:creator>Adam Steciuk</dc:creator>
      <guid isPermaLink="false">https://blog.launchpad.net/?p=4590</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://marketplace.visualstudio.com/items?itemName=Canonical.launchpad-merge-proposals&#34;&gt;Launchpad Merge Proposals&lt;/a&gt;, a VS Code extension for reviewing Launchpad merge proposals, is now available on the Visual Studio Marketplace as a preview release.&lt;/p&gt;
&lt;p&gt;The extension brings the review into the editor. It finds the merge proposals for the branch you have checked out, renders their diffs in VS Code’s diff editor, and lets you comment and vote without opening a browser.&lt;/p&gt;
&lt;h2 id=&#34;what-the-extension-does&#34;&gt;What the extension does&lt;/h2&gt;
&lt;h3 id=&#34;finds-the-merge-proposals-for-the-branch-you-are-on&#34;&gt;Finds the merge proposals for the branch you are on&lt;/h3&gt;
&lt;p&gt;It reads the upstream of the checked-out branch and lists merge proposals in both directions: &lt;strong&gt;outgoing&lt;/strong&gt;, where your branch is the source, and &lt;strong&gt;incoming&lt;/strong&gt;, where it is the target. Proposals can be filtered by status.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.launchpad.net/images/external/assets.ubuntu.com/v1/1e88331d-merge_proposals.gif&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;renders-diffs-in-the-vs-code-editor&#34;&gt;Renders diffs in the VS Code editor&lt;/h3&gt;
&lt;p&gt;Open &lt;strong&gt;Files Changed&lt;/strong&gt; and the proposal opens in VS Code’s side-by-side diff editor, with syntax highlighting and the surrounding file for context. Files are decorated to show where comments already exist.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.launchpad.net/images/external/assets.ubuntu.com/v1/f156a3ba-files_changed.gif&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;puts-comments-next-to-the-code&#34;&gt;Puts comments next to the code&lt;/h3&gt;
&lt;p&gt;Published inline comments appear beside the lines they refer to, and new ones are drafted in the same place, with full markdown support. Drafts are stored on Launchpad, so a review started in the editor can be finished in the browser, or the other way around.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.launchpad.net/images/external/assets.ubuntu.com/v1/90e0c85b-inline_comments.gif&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;submits-the-whole-review-at-once&#34;&gt;Submits the whole review at once&lt;/h3&gt;
&lt;p&gt;Pick a vote, write the summary comment, and submit. Every inline draft is published alongside it.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.launchpad.net/images/external/assets.ubuntu.com/v1/1925d975-submit_review.gif&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;getting-started&#34;&gt;Getting started&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Install &lt;a href=&#34;https://marketplace.visualstudio.com/items?itemName=Canonical.launchpad-merge-proposals&#34;&gt;Launchpad Merge Proposals&lt;/a&gt; in VS Code 1.105 or newer.&lt;/li&gt;
&lt;li&gt;Open a project backed by a Git repository on Launchpad, and check out a branch tracking a remote one.&lt;/li&gt;
&lt;li&gt;Open the &lt;strong&gt;Launchpad Merge Proposals&lt;/strong&gt; view from the &lt;strong&gt;Activity Bar&lt;/strong&gt; and sign in when prompted.&lt;/li&gt;
&lt;li&gt;Select a merge proposal, then pick a preview diff to see the changes and comments.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Sign-in uses Launchpad’s OAuth flow, and the token is stored in VS Code’s secret storage. Launchpad asks what level of access to grant, and the level you pick determines what the extension can do. Reading diffs and published inline comments needs at least read access. Drafting inline comments and submitting reviews needs change access.&lt;/p&gt;
&lt;h2 id=&#34;current-status-of-the-project&#34;&gt;Current status of the project&lt;/h2&gt;
&lt;p&gt;This is a &lt;strong&gt;preview release&lt;/strong&gt;. The core review flow works and we use it daily, but some capabilities are still experimental while we work out how they should behave. The &lt;a href=&#34;https://marketplace.visualstudio.com/items?itemName=Canonical.launchpad-merge-proposals&#34;&gt;README&lt;/a&gt; covers the current state, including a &lt;em&gt;known issues&lt;/em&gt; section that we update with each release.&lt;/p&gt;
&lt;h2 id=&#34;feedback&#34;&gt;Feedback&lt;/h2&gt;
&lt;p&gt;We want to hear what works, what breaks, and what is missing. Please &lt;a href=&#34;https://bugs.launchpad.net/vscode-launchpad/+filebug&#34;&gt;report bugs&lt;/a&gt; and file feature requests on the &lt;a href=&#34;https://launchpad.net/vscode-launchpad&#34;&gt;project’s Launchpad page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The extension is free software under GPL-3.0, and its &lt;a href=&#34;https://git.launchpad.net/vscode-launchpad&#34;&gt;source&lt;/a&gt; is hosted on Launchpad. We welcome contributions via merge proposals. You can even review them using the extension itself!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Merge Launchpad merge proposals with one click</title>
      <link>https://blog.launchpad.net/general/merge-launchpad-merge-proposals-with-one-click/</link>
      <pubDate>Fri, 04 Sep 2026 09:52:42 +0000</pubDate>
      <dc:creator>Goulin Khoge</dc:creator>
      <guid isPermaLink="false">https://blog.launchpad.net/?p=4582</guid>
      <description>&lt;p&gt;Maintainers can now merge changes (merge proposals) directly from the Launchpad UI.&lt;/p&gt;
&lt;p&gt;The new &lt;strong&gt;Request merge&lt;/strong&gt; button is available to anyone with permission to push to the target branch. Launchpad enables it if the merge proposal has:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;An active status and an up-to-date diff&lt;/li&gt;
&lt;li&gt;No conflicts with the target branch&lt;/li&gt;
&lt;li&gt;Approval from the target repository owner, a member of its owner team, or designated review team&lt;/li&gt;
&lt;li&gt;Successfully completed any configured CI checks&lt;/li&gt;
&lt;li&gt;No unmerged prerequisite branches&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When you click on &lt;strong&gt;Request merge&lt;/strong&gt;, Launchpad queues the merge, tracks its progress, and lets you know when the change has been merged.&lt;/p&gt;
&lt;p&gt;The feature is available for all Launchpad-hosted Git repositories, with no additional setup or integration required.&lt;/p&gt;
&lt;p&gt;Happy merging!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Protocol v2 Available at Launchpad</title>
      <link>https://blog.launchpad.net/code/git-protocol-v2-available-at-launchpad/</link>
      <pubDate>Mon, 28 Sep 2020 13:26:21 +0000</pubDate>
      <dc:creator>Thiago F Pappacena</dc:creator>
      <guid isPermaLink="false">https://blog.launchpad.net/?p=4351</guid>
      <description>&lt;p&gt;&lt;em&gt;After a few weeks of development and testing, we are proud to finally announce that Git protocol v2 is available at Launchpad! But what are the improvements in the protocol itself, and how can you benefit from that?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The git v2 protocol was released a while ago, in &lt;a href=&#34;https://opensource.googleblog.com/2018/05/introducing-git-protocol-version-2.html&#34;&gt;May 2018&lt;/a&gt;, with the intent of simplifying git over HTTP transfer protocol, allowing extensibility of git capabilities, and reducing the network usage in some operations.&lt;/p&gt;
&lt;p&gt;For the end user, the main clear benefit is the bandwidth reduction: in the previous version of the protocol, when one does a &amp;ldquo;git pull origin master&amp;rdquo;, for example, even if you have no new commits to fetch from the remote origin, git server would first &amp;ldquo;advertise&amp;rdquo; to the client all refs (branches and tags) available. In big repositories with hundreds or thousands of refs, this simple handshake operation could consume a lot of bandwidth and time to communicate a bunch of data that would potentially be discarded by the client after.&lt;/p&gt;
&lt;p&gt;In the v2 protocol, this waste is no longer present: the client now has the ability to filter which refs it wants to know about before the server starts advertising it.&lt;/p&gt;
&lt;p&gt;The v2 protocol is not the default on git clients yet, but if you are using a git version higher than 2.19, you can use v2: simply run &lt;strong&gt;&lt;code&gt;git config --global protocol.version 2&lt;/code&gt;&lt;/strong&gt;, and you will be using the most recent protocol version when communicating with servers that support this version. Including Launchpad, of course.&lt;/p&gt;
&lt;p&gt;And even if you have repositories hosted in a server that is not yet compatible with v2, don&amp;rsquo;t worry: the git client is backward compatible. If the server does not support v2, git client should fall back gracefully to the previous version and everything should continue to work as expected. We hope you enjoy the new feature. And let us know if you have any &lt;a href=&#34;https://help.launchpad.net/Feedback&#34;&gt;feedback&lt;/a&gt;!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git per-branch permissions</title>
      <link>https://blog.launchpad.net/code/git-per-branch-permissions/</link>
      <pubDate>Thu, 10 Jan 2019 20:41:08 +0000</pubDate>
      <dc:creator>Colin Watson</dc:creator>
      <guid isPermaLink="false">https://blog.launchpad.net/?p=4277</guid>
      <description>&lt;p&gt;We&amp;rsquo;ve had &lt;a href=&#34;https://help.launchpad.net/Code/Git&#34;&gt;Git hosting support&lt;/a&gt; in Launchpad for a few years now.  One thing that some users asked for, particularly larger users such as the Ubuntu kernel team, was the ability to set up per-branch push permissions for their repositories.  Today we rolled out the last piece of this work.&lt;/p&gt;
&lt;p&gt;Launchpad&amp;rsquo;s default behaviour is that repository owners may push anything to their own repositories, including creating new branches, force-pushing (rewriting history), and deleting branches, while nobody else may push anything.  Repository owners can now also choose to protect branches or tags, either individually or using wildcard rules.  If a branch is protected, then by default repository owners can only create or push it but cannot force-push or delete; if a tag is protected, then by default repository owners can create it but cannot move or delete it.&lt;/p&gt;
&lt;p&gt;You can also allow selected contributors to push to protected branches or tags, so if you&amp;rsquo;re collaborating with somebody on a branch and just want to be able to quickly pair-program via &lt;code&gt;git push&lt;/code&gt;, or you want a merge robot to be able to land merge proposals in your repository without having to add it to the team that owns the repository and thus give it privileges it doesn&amp;rsquo;t need, then this feature may be for you.&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s some initial &lt;a href=&#34;https://help.launchpad.net/Code/Git#Permissions&#34;&gt;documentation&lt;/a&gt; on our help site, and here&amp;rsquo;s a screenshot of a repository that&amp;rsquo;s been set up to give a contributor push access to a single branch:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.launchpad.net/images/posts/2019/01/8a6d/git-permissions.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git-to-Git imports</title>
      <link>https://blog.launchpad.net/code/git-to-git-imports/</link>
      <pubDate>Wed, 16 Nov 2016 06:48:05 +0000</pubDate>
      <dc:creator>Colin Watson</dc:creator>
      <guid isPermaLink="false">https://blog.launchpad.net/?p=4249</guid>
      <description>&lt;p&gt;Launchpad has had Git-to-Bazaar code imports &lt;a href=&#34;http://blog.launchpad.net/code/git-branch-imports-now-in-public-beta&#34;&gt;since 2009&lt;/a&gt;, along with imports from a few other systems.  These form part of Launchpad&amp;rsquo;s original mission to keep track of free software, regardless of where it&amp;rsquo;s hosted.  They&amp;rsquo;re also very useful for automatically building other artifacts, such as source package recipes or snap packages, from code hosted elsewhere.  Unfortunately they&amp;rsquo;re quite complicated: they need to be able to do a full round-trip conversion of every revision from the other version control system, which has made it difficult to add support for Git features such as signed commits or submodules.  Once one of these features is present anywhere in the history of a branch, importing it to Bazaar becomes impossible.  This has been a headache for many users.&lt;/p&gt;
&lt;p&gt;We can do better nowadays.  As of last year, we have &lt;a href=&#34;https://help.launchpad.net/Code/Git&#34;&gt;direct Git hosting support&lt;/a&gt; in Launchpad, and we can already build snaps and recipes straight from Git, so we can fulfil our basic goal more robustly now with a lot less code.  So, Launchpad now supports Git-to-Git code imports, also known as Git mirroring.  You can use this to replace many uses of Git-to-Bazaar imports (note that there&amp;rsquo;s no translations integration yet, and of course you won&amp;rsquo;t be able to branch the resulting import using &lt;code&gt;bzr&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;See our &lt;a href=&#34;https://help.launchpad.net/Code/Git#Mirroring_repositories_from_other_sites&#34;&gt;Git documentation&lt;/a&gt; for more details.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Linking Git merge proposals to bugs</title>
      <link>https://blog.launchpad.net/code/linking-git-merge-proposals-to-bugs/</link>
      <pubDate>Thu, 08 Sep 2016 14:21:06 +0000</pubDate>
      <dc:creator>Colin Watson</dc:creator>
      <guid isPermaLink="false">https://blog.launchpad.net/?p=4234</guid>
      <description>&lt;p&gt;We just rolled out a new feature for Launchpad&amp;rsquo;s Git repository hosting: Git-based merge proposals can now be linked to Launchpad bugs.  This can be done manually from the web UI for the merge proposal, but normally you should just mention the Launchpad bug in the commit message of one of the commits you want to merge.  The required commit message text to link to bugs #XXX and #YYY looks like this:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;LP: #XXX, #YYY
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This is the same form used for Launchpad bug references in &lt;tt&gt;debian/changelog&lt;/tt&gt; files in source packages, and the general approach of mentioning bugs in commit messages is similar to that of various other hosting sites.&lt;/p&gt;
&lt;p&gt;Bugs are not automatically closed when merge proposals land, because the policy for when that should happen varies from project to project: for example, projects often only close bugs when they make releases, or when their code is deployed to production sites.&lt;/p&gt;
&lt;p&gt;Users familiar with Bazaar on Launchpad should note that the model for Git bug linking is slightly different: bugs are linked to merge proposals rather than to individual branches.  This difference is mainly because individual branches within a Git repository are often much more ephemeral than Bazaar branches.&lt;/p&gt;
&lt;p&gt;Documentation is &lt;a href=&#34;https://help.launchpad.net/Code/Git#Linking_to_bugs&#34;&gt;here&lt;/a&gt;, along with other details of Launchpad&amp;rsquo;s Git hosting.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Beta test: Git recipes</title>
      <link>https://blog.launchpad.net/cool-new-stuff/beta-test-git-recipes/</link>
      <pubDate>Mon, 25 Jan 2016 11:33:41 +0000</pubDate>
      <dc:creator>Colin Watson</dc:creator>
      <guid isPermaLink="false">https://blog.launchpad.net/?p=4223</guid>
      <description>&lt;p&gt;If you are a member of &lt;a href=&#34;https://launchpad.net/~launchpad-beta-testers&#34;&gt;Launchpad&amp;rsquo;s beta testers team&lt;/a&gt;, you can now try out Git-based recipes.  These work very similarly to the Bazaar-based recipes that Launchpad has supported for a long time, with a few minor changes to handle differences in the underlying version control system: the main thing you&amp;rsquo;ll probably notice is that you almost always need to explicitly specify a branch name.  The &lt;a href=&#34;https://help.launchpad.net/Packaging/SourceBuilds&#34;&gt;recipes documentation&lt;/a&gt; explains what to do; if you&amp;rsquo;re already familiar with how recipes work for Bazaar, then you should probably skip straight to the &lt;a href=&#34;https://help.launchpad.net/Packaging/SourceBuilds/Recipes&#34;&gt;recipes guide&lt;/a&gt; to look over the differences for Git.&lt;/p&gt;
&lt;p&gt;Please try this out and &lt;a href=&#34;https://bugs.launchpad.net/launchpad/+filebug&#34;&gt;report any bugs you find&lt;/a&gt;.  If all goes well, we&amp;rsquo;ll open this up to all users in a couple of weeks.&lt;/p&gt;
&lt;p&gt;Update: as of 2016-03-15, this feature is enabled for all Launchpad users.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Beta test: webhooks</title>
      <link>https://blog.launchpad.net/general/beta-test-webhooks/</link>
      <pubDate>Mon, 09 Nov 2015 15:41:34 +0000</pubDate>
      <dc:creator>Colin Watson</dc:creator>
      <guid isPermaLink="false">https://blog.launchpad.net/?p=4208</guid>
      <description>&lt;p&gt;If you are a member of &lt;a href=&#34;https://launchpad.net/~launchpad-beta-testers&#34;&gt;Launchpad&amp;rsquo;s beta testers team&lt;/a&gt;, you can now try out webhooks for Bazaar branches and Git repositories. These can be used to set up integration with external sites for various purposes, such as running CI jobs or publishing documentation. We expect to open this up to all Launchpad users soon, but in the meantime please do file a bug against Launchpad itself if you encounter any problems.&lt;/p&gt;
&lt;p&gt;See our &lt;a href=&#34;https://help.launchpad.net/API/Webhooks&#34;&gt;webhooks documentation&lt;/a&gt; for more details.&lt;/p&gt;
&lt;p&gt;Update: as of 2015-11-20, this feature is enabled for all Launchpad users.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Launchpad news, April-June 2015</title>
      <link>https://blog.launchpad.net/general/launchpad-news-april-june-2015/</link>
      <pubDate>Thu, 09 Jul 2015 01:07:23 +0000</pubDate>
      <dc:creator>Colin Watson</dc:creator>
      <guid isPermaLink="false">https://blog.launchpad.net/?p=4173</guid>
      <description>&lt;p&gt;It&amp;rsquo;s been a while since we posted much regularly on this team blog, not least because for a while Launchpad was running more or less in maintenance mode.  That&amp;rsquo;s no longer the case and we&amp;rsquo;re back to the point where we can do feature development work again, as exemplified by our recent addition of &lt;a href=&#34;http://blog.launchpad.net/general/git-code-hosting-beta&#34;&gt;Git code hosting support&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Lots of other things have been happening in the Launchpad world lately, though, and the half-way point in the year seems like a good time to start talking about them.  I&amp;rsquo;m going to try to do this a bit more regularly, aiming for about once a month when we also update our internal stakeholders.  This post covers roughly the last three months.&lt;/p&gt;
&lt;h2 id=&#34;git&#34;&gt;Git&lt;/h2&gt;
&lt;p&gt;Of course, you don&amp;rsquo;t get to release a major new feature and then have everything be perfect.  In fact, we&amp;rsquo;d released it pretty much as soon as we had a &lt;a href=&#34;https://en.wikipedia.org/wiki/Minimum_viable_product&#34;&gt;minimum viable product&lt;/a&gt;, so we knew there was plenty more to do.&lt;/p&gt;
&lt;p&gt;Now that the basics work reasonably well, we&amp;rsquo;ve been focusing on tying off loose ends, and on getting to the point where Launchpad itself can be self-hosted in Git: this is partly because most of the things we need to do for that are relevant to many other projects considering a migration, partly because that ensures that any problems with it will affect Launchpad developers directly, and partly because this will allow us to trim a very large amount of database cruft associated with the representation of Launchpad&amp;rsquo;s own branches.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s a brief changelog since our initial public announcement:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Leaving the &amp;ldquo;Target reference path&amp;rdquo; field empty when proposing a Git-based merge proposal no longer crashes (&lt;a href=&#34;https://bugs.launchpad.net/launchpad/+bug/1451068&#34;&gt;#1451068&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Git-based merge proposals can be deleted&lt;/li&gt;
&lt;li&gt;Pushing to private repositories no longer hangs (&lt;a href=&#34;https://bugs.launchpad.net/launchpad/+bug/1451107&#34;&gt;#1451107&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The backend now stores reflogs so that we can help users recover from mistakes&lt;/li&gt;
&lt;li&gt;Pushing a new default repository for a project now sets the repository owner to the project owner rather than to the person performing the push&lt;/li&gt;
&lt;li&gt;The project +sharing view now handles Git repositories&lt;/li&gt;
&lt;li&gt;Branches of a project default repository are now shown on the project&amp;rsquo;s code page, although we expect to be making significant further improvements in this area soon&lt;/li&gt;
&lt;li&gt;Individual Git commits under &amp;ldquo;Recent Commits&amp;rdquo; now link directly to a full view of the corresponding commit&lt;/li&gt;
&lt;li&gt;Merge proposal listings now cover Git (&lt;a href=&#34;https://bugs.launchpad.net/launchpad/+bug/1453020&#34;&gt;#1453020&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Branches in private repositories now show a privacy banner (&lt;a href=&#34;https://bugs.launchpad.net/launchpad/+bug/1457553&#34;&gt;#1457553&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Repositories can now be deleted (&lt;a href=&#34;https://bugs.launchpad.net/launchpad/+bug/1456583&#34;&gt;#1456583&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Private repositories are now browseable and show a privacy banner in the browsing interface&lt;/li&gt;
&lt;li&gt;The URLs for Git-based merge proposals have moved to be directly under the source repository rather than under the source branch, so that historical MPs can still be accessed after deleting the branch (&lt;a href=&#34;https://bugs.launchpad.net/launchpad/+bug/1456589&#34;&gt;#1456589&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Launchpad now sends mail for Git-based merge proposals&lt;/li&gt;
&lt;li&gt;There are various new Git repository listing views, chiefly for projects, packages, and people&lt;/li&gt;
&lt;li&gt;Repositories now have a complete edit form allowing you to rename them, move them between targets, and set their default branch (&amp;ldquo;HEAD&amp;rdquo;) (&lt;a href=&#34;https://bugs.launchpad.net/launchpad/+bug/1456625&#34;&gt;#1456625&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;We&amp;rsquo;ve exported a few more bits and pieces on the webservice API to support Git merge robots&lt;/li&gt;
&lt;li&gt;We&amp;rsquo;ve brought various bits of automation for Git-based merge proposals up to par with their Bazaar equivalents: when a Git branch is updated, Launchpad now automatically updates the preview diffs for any MPs where that is the source branch, and detects whether any MPs where that is the target branch can now be marked as Merged&lt;/li&gt;
&lt;li&gt;The Code settings view for projects now allows you to set the project&amp;rsquo;s default Git repository and to choose whether the default revision system for the project is Bazaar or Git&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We&amp;rsquo;ve started on support for webhooks, and hope to be able to tell you more about this soon. Git-to-Git repository mirroring and native Git recipes are also frequent requests that we know are important to people, and we hope to get to those soon.&lt;/p&gt;
&lt;h2 id=&#34;other-code-review-changes&#34;&gt;Other code review changes&lt;/h2&gt;
&lt;p&gt;Many of the changes needed for Git touched on our code review infrastructure, but we&amp;rsquo;ve been making some other improvements there too.  Launchpad has supported &amp;ldquo;inline comments&amp;rdquo; on merge proposals for a year or so now, allowing you to comment on parts of a diff without having to manually quote it; but the feature hadn&amp;rsquo;t been quite finished and lots of people had nits to pick with it.  We&amp;rsquo;ve made a couple of improvements here lately:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Preview diffs in merge proposals now have keyboard navigation to move between files, diff hunks, and inline comments&lt;/li&gt;
&lt;li&gt;Links to diffs now include a per-file diffstat under an expander triangle&lt;/li&gt;
&lt;li&gt;The mails sent when a reviewer adds inline comments now only include relevant parts of the diff context rather than the entire diff, making them much easier to read and making it harder to miss comments (&lt;a href=&#34;https://bugs.launchpad.net/launchpad/+bug/1334577&#34;&gt;#1334577&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We threw in a couple of bonus features here as well.  You can now see side-by-side diffs for merge proposals as well as unified diffs (&lt;a href=&#34;https://bugs.launchpad.net/launchpad/+bug/917502&#34;&gt;#917502&lt;/a&gt;): there&amp;rsquo;s a link at the top of each preview diff allowing you to switch it to side-by-side mode (we may add a user preference for this later).  And resubmitting a merge proposal now automatically preserves the commit message (&lt;a href=&#34;https://bugs.launchpad.net/launchpad/+bug/676769&#34;&gt;#676769&lt;/a&gt;).&lt;/p&gt;
&lt;h2 id=&#34;package-build-infrastructure&#34;&gt;Package build infrastructure&lt;/h2&gt;
&lt;p&gt;When we first added support for building debug symbol packages (ddebs) in Ubuntu, we handled the build and publication side of things with a temporary hack involving a custom hack to our &lt;code&gt;sbuild&lt;/code&gt; fork that stashed the ddebs on the builder for a while, and a job that periodically fetched them to &lt;a href=&#34;http://ddebs.ubuntu.com/&#34;&gt;ddebs.ubuntu.com&lt;/a&gt;. As is the way of temporary hacks, it proceeded to stay that way for eight and a half years. It mostly worked, but was rather fragile, contributed to tying us to an old &lt;code&gt;sbuild&lt;/code&gt;, wasn&amp;rsquo;t very extensible to PPAs, and couldn&amp;rsquo;t work with virtualised builders where all the builder&amp;rsquo;s state is reset before every build.&lt;/p&gt;
&lt;p&gt;A couple of years ago we put together the Launchpad changes required to store ddebs straightforwardly in Launchpad instead, but weren&amp;rsquo;t able to deploy this at the time due to needing better librarian infrastructure. We finally got all this cleared out in April and deployed the new ddeb publishing mechanism. The main user-visible effect of this is that &lt;a href=&#34;http://ddebs.ubuntu.com/&#34;&gt;ddebs.ubuntu.com&lt;/a&gt; isn&amp;rsquo;t liable to lose packages any more, and ddebs are also available from Launchpad build pages.&lt;/p&gt;
&lt;p&gt;Having done this, we were able to &lt;a href=&#34;https://lists.ubuntu.com/archives/ubuntu-devel-announce/2015-June/001137.html&#34;&gt;upgrade&lt;/a&gt; from our 2004-era fork of &lt;code&gt;sbuild&lt;/code&gt; to a modern version, which fixed a number of long-standing bugs.&lt;/p&gt;
&lt;p&gt;All architectures are now optional for PPAs (&lt;a href=&#34;https://bugs.launchpad.net/launchpad/+bug/1244868&#34;&gt;#1244868&lt;/a&gt;), so, for example, a PPA that only needs to support &lt;code&gt;armhf&lt;/code&gt; can save builder cycles by disabling &lt;code&gt;amd64&lt;/code&gt; and &lt;code&gt;i386&lt;/code&gt;. At the moment this can only be done by Launchpad administrators, so &lt;a href=&#34;https://answers.launchpad.net/launchpad/+addquestion&#34;&gt;ask a question on Launchpad&lt;/a&gt; if you think this would be worth doing for any of your PPAs.&lt;/p&gt;
&lt;p&gt;We rewrote the way that we install build-dependencies for &lt;a href=&#34;https://help.launchpad.net/Packaging/SourceBuilds/Recipes&#34;&gt;source package recipes&lt;/a&gt;. This allows recipes to handle the &amp;ldquo;:native&amp;rdquo; qualifier in build-dependencies which is used in some places as part of supporting cross-building.&lt;/p&gt;
&lt;p&gt;The next step in this modernisation programme will be to move all builds into &lt;a href=&#34;https://insights.ubuntu.com/2014/10/30/scalingstack-2x-performance-in-launchpads-build-farm-with-openstack/&#34;&gt;ScalingStack&lt;/a&gt; and decommission the corresponding bare-metal builders, which we&amp;rsquo;ll be starting soon and working on an architecture-by-architecture basis as that cloud gains support for them. In the short term, this will give us better build capacity on the migrated architectures; in the longer term, it will let us support PPA builds on more architectures, and erase the cumbersome distinction between &amp;ldquo;non-virtualised&amp;rdquo; and &amp;ldquo;virtualised&amp;rdquo; builders. More news on this as it happens.&lt;/p&gt;
&lt;h2 id=&#34;performance&#34;&gt;Performance&lt;/h2&gt;
&lt;p&gt;We upgraded to significantly more modern database servers earlier this year, which meant that a lot of hitherto difficult timeout problems suddenly either disappeared or became tractable. There are still some bad queries and a few mysterious problems, but as a general trend our timeout rates are very significantly down from where they were six months ago. We have some more general plans in this area, and will continue to spot-fix bad pages as they show up and as time permits.&lt;/p&gt;
&lt;h2 id=&#34;epilogue&#34;&gt;Epilogue&lt;/h2&gt;
&lt;p&gt;We have lots more to do across the whole application, but still have a rather limited number of developers. If any of this kind of thing sounds interesting and you&amp;rsquo;d like to help, &lt;a href=&#34;https://dev.launchpad.net/&#34;&gt;you can&lt;/a&gt;!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git code hosting beta</title>
      <link>https://blog.launchpad.net/general/git-code-hosting-beta/</link>
      <pubDate>Fri, 01 May 2015 20:50:11 +0000</pubDate>
      <dc:creator>William Grant</dc:creator>
      <guid isPermaLink="false">https://blog.launchpad.net/?p=4163</guid>
      <description>&lt;p&gt;Today we&amp;rsquo;re announcing early support for hosting &lt;a href=&#34;http://git-scm.com/&#34;&gt;Git&lt;/a&gt; repositories directly on Launchpad, as well as or instead of &lt;a href=&#34;http://bazaar.canonical.com/&#34;&gt;Bazaar&lt;/a&gt; branches. This has been by far the single most commonly requested feature from Launchpad code hosting for a long time; we&amp;rsquo;ve been working hard on it for several months now, and we&amp;rsquo;re very happy to be able to release it for general use.&lt;/p&gt;
&lt;p&gt;This is distinct from the facility to &lt;a href=&#34;https://help.launchpad.net/Code/Imports&#34;&gt;import code&lt;/a&gt; from Git (and some other systems) into Bazaar that Launchpad has included for many years. Code imports are useful to aggregate information from all over the free software ecosystem in a unified way, which has always been one of the primary goals of Launchpad, and in the future we may add the facility to import code into Git as well. However, what we&amp;rsquo;re releasing today is native support: you can use git push to upload code to Launchpad, and your users and collaborators can use git clone to download it, in the same kind of way that you can with any Git server.&lt;/p&gt;
&lt;p&gt;Our support is still in its early stages, and we still have several features to add to bring it up to parity with Bazaar hosting in Launchpad, as well as generally making it easier and more pleasant to use. We&amp;rsquo;ve released it before it&amp;rsquo;s completely polished because many people are clamouring to be able to use it and we&amp;rsquo;re ready to let you all do so. From here on in, we&amp;rsquo;ll be adding features, applying polish, and fixing bugs using Launchpad&amp;rsquo;s normal iterative deployment process: changes will be rolled out to production once they&amp;rsquo;re ready, so you&amp;rsquo;ll see the UI gradually improving over time.&lt;/p&gt;
&lt;h2 id=&#34;whats-supported&#34;&gt;What&amp;rsquo;s supported?&lt;/h2&gt;
&lt;p&gt;You can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;push Git repositories to Launchpad over SSH&lt;/li&gt;
&lt;li&gt;clone repositories over git://, SSH, or HTTPS&lt;/li&gt;
&lt;li&gt;see summary information on repositories and the branches they contain in the Launchpad web UI&lt;/li&gt;
&lt;li&gt;follow links from the Launchpad web UI to a full-featured code browser (cgit)&lt;/li&gt;
&lt;li&gt;push and clone private repositories, if you have a commercial subscription to Launchpad&lt;/li&gt;
&lt;li&gt;propose merges from one branch to another, including in a different repository, provided that they are against the same project or package&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;what-will-be-supported-later&#34;&gt;What will be supported later?&lt;/h2&gt;
&lt;p&gt;Launchpad&amp;rsquo;s Bazaar support has grown many features over the years, and it will take some time to bring our Git support up to full parity with it and beyond. Git repositories use a somewhat different model from Bazaar branches, which we&amp;rsquo;ve had to account for in many places, and some facilities will require complete reimplementation before we can support them with Git.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s an incomplete list of some of the features we hope to add:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;useful subscriptions (currently only attribute change notifications work, which are not usually very interesting in themselves)&lt;/li&gt;
&lt;li&gt;RSS feeds&lt;/li&gt;
&lt;li&gt;mirroring&lt;/li&gt;
&lt;li&gt;webhooks&lt;/li&gt;
&lt;li&gt;an integrated code browser&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;See our &lt;a href=&#34;https://help.launchpad.net/Code/Git&#34;&gt;help page&lt;/a&gt; for more known issues and instructions on using Launchpad with Git.&lt;/p&gt;
&lt;h2 id=&#34;helping-out&#34;&gt;Helping out&lt;/h2&gt;
&lt;p&gt;This is a new service, and we welcome your feedback: you can ask questions in #launchpad on freenode IRC, on our &lt;a href=&#34;https://launchpad.net/~launchpad-users&#34;&gt;launchpad-users&lt;/a&gt; mailing list, or on &lt;a href=&#34;https://answers.launchpad.net/launchpad/+addquestion&#34;&gt;Launchpad Answers&lt;/a&gt;, and if you find a bug then please &lt;a href=&#34;https://bugs.launchpad.net/launchpad/+filebug&#34;&gt;tell us about that&lt;/a&gt; too.&lt;/p&gt;
&lt;p&gt;Launchpad is free software, licensed under the GNU AGPLv3. We&amp;rsquo;d be very happy to mentor people who want to help out with parts of this service, or to build things on top of it using our &lt;a href=&#34;https://help.launchpad.net/API/launchpadlib&#34;&gt;published API&lt;/a&gt;. Some preliminary documentation on this is on our &lt;a href=&#34;https://dev.launchpad.net/Code/Git&#34;&gt;developer wiki&lt;/a&gt;, and you can always &lt;a href=&#34;https://dev.launchpad.net/Help&#34;&gt;contact us for help&lt;/a&gt;.&lt;/p&gt;
</description>
    </item>
    
  </channel>
</rss>
