I want to use local help
diff --git a/doc/Dependencies.html b/doc/Dependencies.html
new file mode 100644
index 0000000000..ed8bdf4c9a
--- /dev/null
+++ b/doc/Dependencies.html
@@ -0,0 +1,38 @@
+
+
+ SharpDevelop Dependencies
+
+
+
+
+ SharpDevelop can take advantage of the following software if you install it:
+
+
+
+
+
\ No newline at end of file
diff --git a/src/AddIns/BackendBindings/Python/RequiredLibraries/Chiron.exe b/src/AddIns/BackendBindings/Python/RequiredLibraries/Chiron.exe
index 94a5ca6f2b..c879fd9bf2 100644
Binary files a/src/AddIns/BackendBindings/Python/RequiredLibraries/Chiron.exe and b/src/AddIns/BackendBindings/Python/RequiredLibraries/Chiron.exe differ
diff --git a/src/AddIns/BackendBindings/Python/RequiredLibraries/DLLs/IronPython.Wpf.dll b/src/AddIns/BackendBindings/Python/RequiredLibraries/DLLs/IronPython.Wpf.dll
index 96a3038946..0d2fd5b432 100644
Binary files a/src/AddIns/BackendBindings/Python/RequiredLibraries/DLLs/IronPython.Wpf.dll and b/src/AddIns/BackendBindings/Python/RequiredLibraries/DLLs/IronPython.Wpf.dll differ
diff --git a/src/AddIns/BackendBindings/Python/RequiredLibraries/IronPython.Modules.dll b/src/AddIns/BackendBindings/Python/RequiredLibraries/IronPython.Modules.dll
index 91d96fbe86..109d59f433 100755
Binary files a/src/AddIns/BackendBindings/Python/RequiredLibraries/IronPython.Modules.dll and b/src/AddIns/BackendBindings/Python/RequiredLibraries/IronPython.Modules.dll differ
diff --git a/src/AddIns/BackendBindings/Python/RequiredLibraries/IronPython.dll b/src/AddIns/BackendBindings/Python/RequiredLibraries/IronPython.dll
index 364120c581..592155a683 100755
Binary files a/src/AddIns/BackendBindings/Python/RequiredLibraries/IronPython.dll and b/src/AddIns/BackendBindings/Python/RequiredLibraries/IronPython.dll differ
diff --git a/src/AddIns/BackendBindings/Python/RequiredLibraries/Microsoft.Dynamic.dll b/src/AddIns/BackendBindings/Python/RequiredLibraries/Microsoft.Dynamic.dll
index e621051170..14b7ff99e0 100644
Binary files a/src/AddIns/BackendBindings/Python/RequiredLibraries/Microsoft.Dynamic.dll and b/src/AddIns/BackendBindings/Python/RequiredLibraries/Microsoft.Dynamic.dll differ
diff --git a/src/AddIns/BackendBindings/Python/RequiredLibraries/Microsoft.Scripting.Metadata.dll b/src/AddIns/BackendBindings/Python/RequiredLibraries/Microsoft.Scripting.Metadata.dll
index 4c093b1530..7d94df195f 100644
Binary files a/src/AddIns/BackendBindings/Python/RequiredLibraries/Microsoft.Scripting.Metadata.dll and b/src/AddIns/BackendBindings/Python/RequiredLibraries/Microsoft.Scripting.Metadata.dll differ
diff --git a/src/AddIns/BackendBindings/Python/RequiredLibraries/Microsoft.Scripting.dll b/src/AddIns/BackendBindings/Python/RequiredLibraries/Microsoft.Scripting.dll
index f37c4c4473..61556abb80 100755
Binary files a/src/AddIns/BackendBindings/Python/RequiredLibraries/Microsoft.Scripting.dll and b/src/AddIns/BackendBindings/Python/RequiredLibraries/Microsoft.Scripting.dll differ
diff --git a/src/AddIns/BackendBindings/Python/RequiredLibraries/ipy.exe b/src/AddIns/BackendBindings/Python/RequiredLibraries/ipy.exe
index e1041bfded..51b875418b 100755
Binary files a/src/AddIns/BackendBindings/Python/RequiredLibraries/ipy.exe and b/src/AddIns/BackendBindings/Python/RequiredLibraries/ipy.exe differ
diff --git a/src/AddIns/BackendBindings/Python/RequiredLibraries/ipyw.exe b/src/AddIns/BackendBindings/Python/RequiredLibraries/ipyw.exe
index 6cc71e8087..97d1660474 100644
Binary files a/src/AddIns/BackendBindings/Python/RequiredLibraries/ipyw.exe and b/src/AddIns/BackendBindings/Python/RequiredLibraries/ipyw.exe differ
diff --git a/src/AddIns/BackendBindings/Ruby/IronRuby/bin/Chiron.exe b/src/AddIns/BackendBindings/Ruby/IronRuby/bin/Chiron.exe
index 94a5ca6f2b..c879fd9bf2 100644
Binary files a/src/AddIns/BackendBindings/Ruby/IronRuby/bin/Chiron.exe and b/src/AddIns/BackendBindings/Ruby/IronRuby/bin/Chiron.exe differ
diff --git a/src/AddIns/BackendBindings/Ruby/IronRuby/bin/IronRuby.Libraries.Yaml.dll b/src/AddIns/BackendBindings/Ruby/IronRuby/bin/IronRuby.Libraries.Yaml.dll
index 901b79fcaa..265a0e553f 100644
Binary files a/src/AddIns/BackendBindings/Ruby/IronRuby/bin/IronRuby.Libraries.Yaml.dll and b/src/AddIns/BackendBindings/Ruby/IronRuby/bin/IronRuby.Libraries.Yaml.dll differ
diff --git a/src/AddIns/BackendBindings/Ruby/IronRuby/bin/IronRuby.Libraries.dll b/src/AddIns/BackendBindings/Ruby/IronRuby/bin/IronRuby.Libraries.dll
index 271712e8e4..477a87d187 100644
Binary files a/src/AddIns/BackendBindings/Ruby/IronRuby/bin/IronRuby.Libraries.dll and b/src/AddIns/BackendBindings/Ruby/IronRuby/bin/IronRuby.Libraries.dll differ
diff --git a/src/AddIns/BackendBindings/Ruby/IronRuby/bin/IronRuby.dll b/src/AddIns/BackendBindings/Ruby/IronRuby/bin/IronRuby.dll
index 9b8bf98a9d..79b634a2ec 100644
Binary files a/src/AddIns/BackendBindings/Ruby/IronRuby/bin/IronRuby.dll and b/src/AddIns/BackendBindings/Ruby/IronRuby/bin/IronRuby.dll differ
diff --git a/src/AddIns/BackendBindings/Ruby/IronRuby/bin/Microsoft.Dynamic.dll b/src/AddIns/BackendBindings/Ruby/IronRuby/bin/Microsoft.Dynamic.dll
index e621051170..14b7ff99e0 100644
Binary files a/src/AddIns/BackendBindings/Ruby/IronRuby/bin/Microsoft.Dynamic.dll and b/src/AddIns/BackendBindings/Ruby/IronRuby/bin/Microsoft.Dynamic.dll differ
diff --git a/src/AddIns/BackendBindings/Ruby/IronRuby/bin/Microsoft.Scripting.Metadata.dll b/src/AddIns/BackendBindings/Ruby/IronRuby/bin/Microsoft.Scripting.Metadata.dll
index 4c093b1530..7d94df195f 100644
Binary files a/src/AddIns/BackendBindings/Ruby/IronRuby/bin/Microsoft.Scripting.Metadata.dll and b/src/AddIns/BackendBindings/Ruby/IronRuby/bin/Microsoft.Scripting.Metadata.dll differ
diff --git a/src/AddIns/BackendBindings/Ruby/IronRuby/bin/Microsoft.Scripting.dll b/src/AddIns/BackendBindings/Ruby/IronRuby/bin/Microsoft.Scripting.dll
index f37c4c4473..61556abb80 100644
Binary files a/src/AddIns/BackendBindings/Ruby/IronRuby/bin/Microsoft.Scripting.dll and b/src/AddIns/BackendBindings/Ruby/IronRuby/bin/Microsoft.Scripting.dll differ
diff --git a/src/AddIns/BackendBindings/Ruby/IronRuby/bin/ir.exe b/src/AddIns/BackendBindings/Ruby/IronRuby/bin/ir.exe
index 6ecfda77ac..728b191245 100644
Binary files a/src/AddIns/BackendBindings/Ruby/IronRuby/bin/ir.exe and b/src/AddIns/BackendBindings/Ruby/IronRuby/bin/ir.exe differ
diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditorView.cs b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditorView.cs
index b42a62e93b..a49d7eab11 100755
--- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditorView.cs
+++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditorView.cs
@@ -27,6 +27,7 @@ using ICSharpCode.AvalonEdit.Highlighting;
using ICSharpCode.AvalonEdit.Rendering;
using ICSharpCode.NRefactory.Editor;
using ICSharpCode.NRefactory.Semantics;
+using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Editor;
using ICSharpCode.SharpDevelop.Editor.AvalonEdit;
@@ -231,7 +232,12 @@ namespace ICSharpCode.AvalonEdit.AddIn
}
MemberResolveResult mrr = result as MemberResolveResult;
if (mrr != null) {
- HelpProvider.ShowHelp(mrr.Member);
+ if ((mrr.Member.DeclaringType.Kind == TypeKind.Enum) &&
+ (mrr.Member.DeclaringType.GetDefinition() != null)) {
+ HelpProvider.ShowHelp(mrr.Member.DeclaringType.GetDefinition());
+ } else {
+ HelpProvider.ShowHelp(mrr.Member);
+ }
}
}
#endregion
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Controls/PanelMoveAdorner.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Controls/PanelMoveAdorner.cs
index 5333abb315..80053c4a89 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Controls/PanelMoveAdorner.cs
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Controls/PanelMoveAdorner.cs
@@ -47,10 +47,14 @@ namespace ICSharpCode.WpfDesign.Designer.Controls
{
base.OnApplyTemplate();
+ var bnd = new Binding("IsVisible") {Source = item.Component};
+ bnd.Converter = CollapsedWhenFalse.Instance;
+ BindingOperations.SetBinding(this, UIElement.VisibilityProperty, bnd);
+
var surface = this.TryFindParent();
if (surface != null && surface.ZoomControl != null)
{
- var bnd = new Binding("CurrentZoom") {Source = surface.ZoomControl};
+ bnd = new Binding("CurrentZoom") {Source = surface.ZoomControl};
bnd.Converter = InvertedZoomConverter.Instance;
BindingOperations.SetBinding(scaleTransform, ScaleTransform.ScaleXProperty, bnd);
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/DesignPanel.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/DesignPanel.cs
index da4e767c12..b7af3ec784 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/DesignPanel.cs
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/DesignPanel.cs
@@ -13,6 +13,7 @@ using System.Windows.Threading;
using ICSharpCode.WpfDesign.Adorners;
using ICSharpCode.WpfDesign.Designer.Controls;
+using ICSharpCode.WpfDesign.Designer.Xaml;
namespace ICSharpCode.WpfDesign.Designer
{
@@ -35,20 +36,29 @@ namespace ICSharpCode.WpfDesign.Designer
}
}
- static void RunHitTest(Visual reference, Point point, HitTestFilterCallback filterCallback, HitTestResultCallback resultCallback)
+ void RunHitTest(Visual reference, Point point, HitTestFilterCallback filterCallback, HitTestResultCallback resultCallback)
{
VisualTreeHelper.HitTest(reference, filterCallback, resultCallback,
new PointHitTestParameters(point));
}
- static HitTestFilterBehavior FilterHitTestInvisibleElements(DependencyObject potentialHitTestTarget)
+ HitTestFilterBehavior FilterHitTestInvisibleElements(DependencyObject potentialHitTestTarget)
{
UIElement element = potentialHitTestTarget as UIElement;
+
if (element != null) {
if (!(element.IsHitTestVisible && element.Visibility == Visibility.Visible)) {
return HitTestFilterBehavior.ContinueSkipSelfAndChildren;
}
+
+ var designItem = Context.Services.Component.GetDesignItem(element) as XamlDesignItem;
+
+ if (designItem != null && designItem.IsDesignTimeLocked) {
+ return HitTestFilterBehavior.ContinueSkipSelfAndChildren;
+ }
+
}
+
return HitTestFilterBehavior.Continue;
}
@@ -103,7 +113,7 @@ namespace ICSharpCode.WpfDesign.Designer
if (continueHitTest && testDesignSurface) {
RunHitTest(
- this.Child, mousePosition, delegate { return HitTestFilterBehavior.Continue; },
+ this.Child, mousePosition, FilterHitTestInvisibleElements,
delegate(HitTestResult result) {
if (result != null && result.VisualHit != null && result.VisualHit is Visual) {
DesignPanelHitTestResult customResult = new DesignPanelHitTestResult((Visual)result.VisualHit);
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/DesignSurface.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/DesignSurface.cs
index ffbf2246d3..0de7db3e29 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/DesignSurface.cs
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/DesignSurface.cs
@@ -31,7 +31,7 @@ namespace ICSharpCode.WpfDesign.Designer
///
[TemplatePart(Name = "PART_DesignContent", Type = typeof(ContentControl))]
[TemplatePart(Name = "PART_Zoom", Type = typeof(ZoomControl))]
- public class DesignSurface : ContentControl
+ public partial class DesignSurface : ContentControl
{
private FocusNavigator _focusNav;
@@ -73,10 +73,21 @@ namespace ICSharpCode.WpfDesign.Designer
base.OnApplyTemplate();
}
+
+ private bool enableBringIntoView = false;
+
+ public void ScrollIntoView(DesignItem designItem)
+ {
+ enableBringIntoView = true;
+ LogicalTreeHelper.BringIntoView(designItem.View);
+ enableBringIntoView = false;
+ }
void _partDesignContent_RequestBringIntoView(object sender, RequestBringIntoViewEventArgs e)
{
- e.Handled = true;
+ if (!enableBringIntoView)
+ e.Handled = true;
+ enableBringIntoView = false;
}
protected override void OnPreviewMouseLeftButtonDown(MouseButtonEventArgs e)
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/BorderForInvisibleControl.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/BorderForInvisibleControl.cs
index 0657413535..bd46bf04d2 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/BorderForInvisibleControl.cs
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/BorderForInvisibleControl.cs
@@ -3,15 +3,17 @@
using System;
using System.Collections.Generic;
+using System.ComponentModel;
using System.Linq;
using System.Text;
-using ICSharpCode.WpfDesign.Adorners;
-using ICSharpCode.WpfDesign.Extensions;
-using System.Windows.Controls;
using System.Windows;
-using ICSharpCode.WpfDesign.Designer.Controls;
+using System.Windows.Controls;
using System.Windows.Media;
+using ICSharpCode.WpfDesign.Adorners;
+using ICSharpCode.WpfDesign.Designer.Controls;
+using ICSharpCode.WpfDesign.Extensions;
+
namespace ICSharpCode.WpfDesign.Designer.Extensions
{
[ExtensionFor(typeof(Panel))]
@@ -21,6 +23,7 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions
public class BorderForInvisibleControl : PermanentAdornerProvider
{
AdornerPanel adornerPanel;
+ AdornerPanel cachedAdornerPanel;
protected override void OnInitialized()
{
@@ -28,52 +31,79 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions
if (ExtendedItem.Component is Border)
{
- ExtendedItem.PropertyChanged+= (s, e) => ExtendedItem_PropertyChanged();
+ ExtendedItem.PropertyChanged += (s, e) => UpdateAdorner();
+ }
+
+ // If component is a ContentControl it must be of type ContentControl specifically, and not derived types like Label and Button.
+ if (!(ExtendedItem.Component is ContentControl) || ExtendedItem.Component.GetType() == typeof(ContentControl)) {
+ UpdateAdorner();
- ExtendedItem_PropertyChanged();
+ var element = ExtendedItem.Component as UIElement;
+ if (element != null) {
+ element.IsVisibleChanged += (s, e) => UpdateAdorner();
+ }
}
- else if (ExtendedItem.Component is Panel || ExtendedItem.Component is Viewbox || ExtendedItem.Component is ContentControl)
- {
- CreateAdorner();
- }
}
- void ExtendedItem_PropertyChanged()
+ void UpdateAdorner()
{
- if (ExtendedItem.Component is Border)
- {
- var border = ExtendedItem.Component as Border;
- if (border.ReadLocalValue(Border.BorderBrushProperty) == DependencyProperty.UnsetValue || border.ReadLocalValue(Border.BorderThicknessProperty) == DependencyProperty.UnsetValue)
- {
+ var element = ExtendedItem.Component as UIElement;
+ if (element != null) {
+ var border = element as Border;
+ if (element.IsVisible && (border == null || IsAnyBorderEdgeInvisible(border))) {
CreateAdorner();
+
+ if (border != null) {
+ var adornerBorder = (Border)adornerPanel.Children[0];
+
+ if (IsBorderBrushInvisible(border))
+ adornerBorder.BorderThickness = new Thickness(1);
+ else
+ adornerBorder.BorderThickness = new Thickness(border.BorderThickness.Left > 0 ? 0 : 1,
+ border.BorderThickness.Top > 0 ? 0 : 1,
+ border.BorderThickness.Right > 0 ? 0 : 1,
+ border.BorderThickness.Bottom > 0 ? 0 : 1);
+ }
}
- else
- {
+ else {
RemoveAdorner();
}
- }
+ }
+ }
+
+ bool IsAnyBorderEdgeInvisible(Border border)
+ {
+ return IsBorderBrushInvisible(border) || border.BorderThickness.Left == 0 || border.BorderThickness.Top == 0 || border.BorderThickness.Right == 0 || border.BorderThickness.Bottom == 0;
+ }
+
+ bool IsBorderBrushInvisible(Border border)
+ {
+ return border.BorderBrush == null || border.BorderBrush == Brushes.Transparent;
}
private void CreateAdorner()
{
- if (adornerPanel == null)
- {
- adornerPanel = new AdornerPanel();
- adornerPanel.Order = AdornerOrder.Background;
- var border = new Border();
- border.BorderThickness = new Thickness(1);
- border.BorderBrush = new SolidColorBrush(Color.FromRgb(0xCC, 0xCC, 0xCC));
- border.IsHitTestVisible = false;
- AdornerPanel.SetPlacement(border, AdornerPlacement.FillContent);
- adornerPanel.Children.Add(border);
+ if (adornerPanel == null) {
+
+ if (cachedAdornerPanel == null) {
+ cachedAdornerPanel = new AdornerPanel();
+ cachedAdornerPanel.Order = AdornerOrder.Background;
+ var border = new Border();
+ border.BorderThickness = new Thickness(1);
+ border.BorderBrush = new SolidColorBrush(Color.FromRgb(0xCC, 0xCC, 0xCC));
+ border.IsHitTestVisible = false;
+ AdornerPanel.SetPlacement(border, AdornerPlacement.FillContent);
+ cachedAdornerPanel.Children.Add(border);
+ }
+
+ adornerPanel = cachedAdornerPanel;
Adorners.Add(adornerPanel);
}
}
private void RemoveAdorner()
{
- if (adornerPanel != null)
- {
+ if (adornerPanel != null) {
Adorners.Remove(adornerPanel);
adornerPanel = null;
}
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/DefaultPlacementBehavior.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/DefaultPlacementBehavior.cs
index 1eaa1533f3..f7a1c0b352 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/DefaultPlacementBehavior.cs
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/DefaultPlacementBehavior.cs
@@ -18,10 +18,9 @@ using System.Windows.Controls.Primitives;
namespace ICSharpCode.WpfDesign.Designer.Extensions
{
[ExtensionFor(typeof(Panel))]
- [ExtensionFor(typeof(ContentControl))]
+ [ExtensionFor(typeof(Control))]
[ExtensionFor(typeof(Border))]
[ExtensionFor(typeof(Viewbox))]
- [ExtensionFor(typeof(ItemsControl))]
public class DefaultPlacementBehavior : BehaviorExtension, IPlacementBehavior
{
static List _contentControlsNotAllowedToAdd;
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/ResizeThumbExtension.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/ResizeThumbExtension.cs
index d0e4adc1c1..8229a351b6 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/ResizeThumbExtension.cs
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/ResizeThumbExtension.cs
@@ -147,6 +147,15 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions
if (alignment.Vertical == VerticalAlignment.Bottom) dy = drag.Delta.Y;
var designPanel = ExtendedItem.Services.DesignPanel as DesignPanel;
+
+ if ((Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl)) && alignment.Horizontal != HorizontalAlignment.Center && alignment.Vertical != VerticalAlignment.Center)
+ {
+ if (dx > dy)
+ dx = dy;
+ else
+ dy = dx;
+ }
+
if (zoom != null)
{
dx = dx * (1 / zoom.CurrentZoom);
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Images/license.txt b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Images/license.txt
index 5b3df7ad65..194fd7f1e1 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Images/license.txt
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Images/license.txt
@@ -14,6 +14,7 @@ Copied from the Fugue Icon Library and left unmodified:
- Icons.16x16.WpfOutline.EyeClosed.png
- Icons.16x16.GuideSnap.png
- Icons.16x16.GridSnap.png
+ - lock.png
Copied from the Fugue Icon Library and modified or mashed up with other Fugue
Icons or parts taken from them:
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Images/lock.png b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Images/lock.png
new file mode 100644
index 0000000000..571c16d386
Binary files /dev/null and b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Images/lock.png differ
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/DragTreeView.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/DragTreeView.cs
index 1ee8f58adf..ac121b1bbd 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/DragTreeView.cs
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/DragTreeView.cs
@@ -53,12 +53,34 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView
get { return (object)GetValue(RootProperty); }
set { SetValue(RootProperty, value); }
}
+
+ #region Filtering
+
+ public static readonly DependencyProperty FilterProperty =
+ DependencyProperty.Register("Filter", typeof(string), typeof(DragTreeView), new PropertyMetadata(OnFilterPropertyChanged));
+
+ public string Filter {
+ get { return (string)GetValue(FilterProperty); }
+ set { SetValue(FilterProperty, value); }
+ }
+
+ private static void OnFilterPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
+ {
+ var ctl = d as DragTreeView;
+ var ev = ctl.FilterChanged;
+ if (ev != null)
+ ev(ctl.Filter);
+ }
+
+ public event Action FilterChanged;
+
+ public virtual bool ShouldItemBeVisible(DragTreeViewItem dragTreeViewitem)
+ {
+ return true;
+ }
- //public object[] SelectedItems
- //{
- // get { return Selection.Select(item => item.DataContext).ToArray(); }
- //}
-
+ #endregion
+
protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e)
{
base.OnPropertyChanged(e);
@@ -261,7 +283,7 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView
OnSelectionChanged();
}
- void SelectOnly(DragTreeViewItem item)
+ protected virtual void SelectOnly(DragTreeViewItem item)
{
ClearSelection();
Select(item);
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/DragTreeViewItem.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/DragTreeViewItem.cs
index 8eb6ac705f..f510988d2b 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/DragTreeViewItem.cs
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/DragTreeViewItem.cs
@@ -20,10 +20,12 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView
{
public class DragTreeViewItem : TreeViewItem
{
+ ContentPresenter part_header;
+
static DragTreeViewItem()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(DragTreeViewItem),
- new FrameworkPropertyMetadata(typeof(DragTreeViewItem)));
+ new FrameworkPropertyMetadata(typeof(DragTreeViewItem)));
}
public DragTreeViewItem()
@@ -37,24 +39,50 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView
ParentTree = this.GetVisualAncestors().OfType().FirstOrDefault();
if (ParentTree != null) {
ParentTree.ItemAttached(this);
+ ParentTree.FilterChanged += ParentTree_FilterChanged;
}
}
+ void ParentTree_FilterChanged(string obj)
+ {
+ var v = ParentTree.ShouldItemBeVisible(this);
+ if (v)
+ part_header.Visibility = Visibility.Visible;
+ else
+ part_header.Visibility = Visibility.Collapsed;
+ }
+
void DragTreeViewItem_Unloaded(object sender, RoutedEventArgs e)
{
if (ParentTree != null) {
ParentTree.ItemDetached(this);
+ ParentTree.FilterChanged -= ParentTree_FilterChanged;
}
ParentTree = null;
}
+
+
+ public override void OnApplyTemplate()
+ {
+ base.OnApplyTemplate();
+
+ part_header = GetTemplateChild("PART_Header") as ContentPresenter;
+ }
public new static readonly DependencyProperty IsSelectedProperty =
- Selector.IsSelectedProperty.AddOwner(typeof(DragTreeViewItem));
+ Selector.IsSelectedProperty.AddOwner(typeof(DragTreeViewItem), new FrameworkPropertyMetadata(OnIsSelectedChanged));
public new bool IsSelected {
get { return (bool)GetValue(IsSelectedProperty); }
set { SetValue(IsSelectedProperty, value); }
}
+
+ public static void OnIsSelectedChanged(DependencyObject s, DependencyPropertyChangedEventArgs e)
+ {
+ var el = s as FrameworkElement;
+ if (el != null)
+ el.BringIntoView();
+ }
public static readonly DependencyProperty IsDragHoverProperty =
DependencyProperty.Register("IsDragHover", typeof(bool), typeof(DragTreeViewItem));
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/Outline.xaml b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/Outline.xaml
index 9fccd006d4..0132bebd87 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/Outline.xaml
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/Outline.xaml
@@ -2,7 +2,8 @@
x:Name="root"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- xmlns:Default="clr-namespace:ICSharpCode.WpfDesign.Designer.OutlineView">
+ xmlns:Default="clr-namespace:ICSharpCode.WpfDesign.Designer.OutlineView"
+ xmlns:Controls="clr-namespace:ICSharpCode.WpfDesign.Designer.Controls">
@@ -34,9 +35,38 @@
+
+
+ ItemsSource="{Binding Children}">
+
@@ -44,15 +74,20 @@
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNode.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNode.cs
index ca01d3d1fb..f3e03c08ba 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNode.cs
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNode.cs
@@ -2,19 +2,21 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
+using System.Collections;
using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.ComponentModel;
using System.Linq;
using System.Text;
-using System.ComponentModel;
-using ICSharpCode.WpfDesign;
-using System.Collections.ObjectModel;
-using System.Collections;
-using ICSharpCode.WpfDesign.Designer;
-using ICSharpCode.WpfDesign.XamlDom;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
+using ICSharpCode.WpfDesign;
+using ICSharpCode.WpfDesign.Designer;
+using ICSharpCode.WpfDesign.Designer.Xaml;
+using ICSharpCode.WpfDesign.XamlDom;
+
namespace ICSharpCode.WpfDesign.Designer.OutlineView
{
public class OutlineNode : INotifyPropertyChanged
@@ -50,6 +52,11 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView
((FrameworkElement) this.DesignItem.Component).Visibility = Visibility.Hidden;
}
+ var locked = designItem.Properties.GetAttachedProperty(DesignTimeProperties.IsLockedProperty).ValueOnInstance;
+ if (locked != null && (bool) locked == true) {
+ this._isDesignTimeLocked = true;
+ }
+
//TODO
DesignItem.NameChanged += new EventHandler(DesignItem_NameChanged);
DesignItem.PropertyChanged += new PropertyChangedEventHandler(DesignItem_PropertyChanged);
@@ -90,13 +97,12 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView
}
}
-
bool _isDesignTimeVisible = true;
public bool IsDesignTimeVisible
{
- get {
- return _isDesignTimeVisible;
+ get {
+ return _isDesignTimeVisible;
}
set {
_isDesignTimeVisible = value;
@@ -112,6 +118,26 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView
}
}
+ bool _isDesignTimeLocked = false;
+
+ public bool IsDesignTimeLocked
+ {
+ get {
+ return _isDesignTimeLocked;
+ }
+ set {
+ _isDesignTimeLocked = value;
+ ((XamlDesignItem)DesignItem).IsDesignTimeLocked = _isDesignTimeLocked;
+
+ RaisePropertyChanged("IsDesignTimeLocked");
+
+// if (value)
+// DesignItem.Properties.GetAttachedProperty(DesignTimeProperties.IsLockedProperty).SetValue(true);
+// else
+// DesignItem.Properties.GetAttachedProperty(DesignTimeProperties.IsLockedProperty).Reset();
+ }
+ }
+
ObservableCollection children = new ObservableCollection();
public ObservableCollection Children {
@@ -168,6 +194,21 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView
var node = OutlineNode.Create(item);
Children.Add(node);
}
+ else
+ {
+ var content = item.ContentProperty;
+ if (content != null)
+ {
+ if (content.IsCollection) {
+ UpdateChildrenCore(content.CollectionElements);
+ }
+ else {
+ if (content.Value != null) {
+ UpdateChildrenCore(new[] { content.Value });
+ }
+ }
+ }
+ }
}
}
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineTreeView.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineTreeView.cs
index e5d4a3674c..f739db7366 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineTreeView.cs
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineTreeView.cs
@@ -33,5 +33,23 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView
foreach (var item in items)
_customOutlineNodes.Add(item.DataContext as OutlineNode);
}
+
+ public override bool ShouldItemBeVisible(DragTreeViewItem dragTreeViewitem)
+ {
+ var node = dragTreeViewitem.DataContext as OutlineNode;
+
+ return string.IsNullOrEmpty(Filter) || node.Name.ToLower().Contains(Filter.ToLower());
+ }
+
+ protected override void SelectOnly(DragTreeViewItem item)
+ {
+ base.SelectOnly(item);
+
+ var node = item.DataContext as OutlineNode;
+
+ var surface = node.DesignItem.View.TryFindParent();
+ if (surface != null)
+ surface.ScrollIntoView(node.DesignItem);
+ }
}
}
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineView.xaml b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineView.xaml
index 9e1cb270b6..6076383cd0 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineView.xaml
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineView.xaml
@@ -98,20 +98,20 @@
-
-
-
+
@@ -144,7 +144,7 @@
Value="False">
+ Value="Collapsed" />
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/WpfDesign.Designer.csproj b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/WpfDesign.Designer.csproj
index a3a415e657..35a81fdab4 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/WpfDesign.Designer.csproj
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/WpfDesign.Designer.csproj
@@ -361,4 +361,7 @@
+
+
+
\ No newline at end of file
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Xaml/XamlComponentService.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Xaml/XamlComponentService.cs
index edbb41d40d..36ca45e8c2 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Xaml/XamlComponentService.cs
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Xaml/XamlComponentService.cs
@@ -90,24 +90,37 @@ namespace ICSharpCode.WpfDesign.Designer.Xaml
}
if (_context.RootItem != null && !string.IsNullOrEmpty(site.Name)) {
- var nameScope = _context.RootItem.Component as INameScope;
- nameScope = NameScope.GetNameScope((DependencyObject) _context.RootItem.Component);
- var fnd = nameScope.FindName(site.Name);
-
- if (fnd != null) {
- string newNm = site.Name + "_Copy";
- fnd = nameScope.FindName(newNm);
- if (fnd == null)
- site.Name = newNm;
- else {
+ var nameScope = NameScopeHelper.GetNameScopeFromObject(_context.RootItem.Component);
+
+ if (nameScope != null) {
+ // The object will be a part of the RootItem namescope, remove local namescope if set
+ NameScopeHelper.ClearNameScopeProperty(obj.Instance);
+
+ string newName = site.Name;
+ if (nameScope.FindName(newName) != null) {
+ int copyIndex = newName.LastIndexOf("_Copy", StringComparison.Ordinal);
+ if (copyIndex < 0) {
+ newName += "_Copy";
+ }
+ else if (!newName.EndsWith("_Copy", StringComparison.Ordinal)) {
+ string copyEnd = newName.Substring(copyIndex + "_Copy".Length);
+ int copyEndValue;
+ if (Int32.TryParse(copyEnd, out copyEndValue))
+ newName = newName.Remove(copyIndex + "_Copy".Length);
+ else
+ newName += "_Copy";
+ }
+
int i = 1;
- while (fnd != null) {
- newNm = site.Name + "_Copy" + i;
- fnd = nameScope.FindName(newNm);
- i++;
+ string newNameTemplate = newName;
+ while (nameScope.FindName(newName) != null) {
+ newName = newNameTemplate + i++;
}
- site.Name = newNm;
+
+ site.Name = newName;
}
+
+ nameScope.RegisterName(newName, obj.Instance);
}
}
return site;
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Xaml/XamlDesignItem.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Xaml/XamlDesignItem.cs
index abac9ec74c..1329a5c6bb 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Xaml/XamlDesignItem.cs
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Xaml/XamlDesignItem.cs
@@ -145,6 +145,23 @@ namespace ICSharpCode.WpfDesign.Designer.Xaml
}
}
+ ///
+ /// Item is Locked at Design Time
+ ///
+ public bool IsDesignTimeLocked {
+ get {
+ var locked = Properties.GetAttachedProperty(DesignTimeProperties.IsLockedProperty).ValueOnInstance;
+ return (locked != null && (bool) locked == true);
+ }
+ set {
+ if (value)
+ Properties.GetAttachedProperty(DesignTimeProperties.IsLockedProperty).SetValue(true);
+ else
+ Properties.GetAttachedProperty(DesignTimeProperties.IsLockedProperty).Reset();
+ }
+
+ }
+
public override DesignItem Clone()
{
DesignItem item = null;
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/AssemblyInfo.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/AssemblyInfo.cs
index 80a76efffd..8942f2f568 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/AssemblyInfo.cs
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/AssemblyInfo.cs
@@ -4,6 +4,7 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
+using System.Windows.Markup;
using NUnit.Framework;
@@ -20,4 +21,8 @@ using NUnit.Framework;
[assembly: AssemblyCulture("")]
// Run unit tests on STA thread.
-[assembly: RequiresSTA]
\ No newline at end of file
+[assembly: RequiresSTA]
+
+[assembly: XmlnsPrefix("http://sharpdevelop.net/WpfDesign/Tests/Controls", "sdtcontrols")]
+
+[assembly: XmlnsDefinition("http://sharpdevelop.net/WpfDesign/Tests/Controls", "ICSharpCode.WpfDesign.Tests.Controls")]
\ No newline at end of file
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/EditOperationTests.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/EditOperationTests.cs
index f36c1744e7..9df9884dcf 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/EditOperationTests.cs
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/EditOperationTests.cs
@@ -151,5 +151,58 @@ namespace ICSharpCode.WpfDesign.Tests.Designer
Assert.AreEqual(_name, grid.ContentProperty.CollectionElements[3].Name);
Assert.AreEqual(grid.ContentProperty.CollectionElements[3], selection.PrimarySelection);
}
+
+ [Test]
+ public void PasteSameElementMultipleTimesCheckCopiesNames()
+ {
+ var grid = IntializePasteOperationsTest();
+ var xamlContext = grid.Context as XamlDesignContext;
+ Assert.IsNotNull(xamlContext);
+
+ var selection = grid.Services.Selection;
+ var innerGrid = grid.ContentProperty.CollectionElements[0];
+
+ selection.SetSelectedComponents(new[] {innerGrid});
+ xamlContext.XamlEditAction.Paste();
+ Assert.AreEqual(innerGrid.ContentProperty.CollectionElements[1], selection.PrimarySelection);
+
+ selection.SetSelectedComponents(new[] {innerGrid});
+ xamlContext.XamlEditAction.Paste();
+ Assert.AreEqual(innerGrid.ContentProperty.CollectionElements[2], selection.PrimarySelection);
+
+ selection.SetSelectedComponents(new[] {innerGrid});
+ xamlContext.XamlEditAction.Paste();
+ Assert.AreEqual(innerGrid.ContentProperty.CollectionElements[3], selection.PrimarySelection);
+
+ selection.SetSelectedComponents(new[] {innerGrid});
+ xamlContext.XamlEditAction.Paste();
+ Assert.AreEqual(innerGrid.ContentProperty.CollectionElements[4], selection.PrimarySelection);
+
+ Assert.IsNullOrEmpty(innerGrid.ContentProperty.CollectionElements[0].Name);
+ Assert.AreEqual(_name, innerGrid.ContentProperty.CollectionElements[1].Name);
+ Assert.AreEqual(_name + "_Copy", innerGrid.ContentProperty.CollectionElements[2].Name);
+ Assert.AreEqual(_name + "_Copy1", innerGrid.ContentProperty.CollectionElements[3].Name);
+ Assert.AreEqual(_name + "_Copy2", innerGrid.ContentProperty.CollectionElements[4].Name);
+
+ xamlContext.XamlEditAction.Copy(new[] {innerGrid.ContentProperty.CollectionElements[3]});
+ var cutXaml = Clipboard.GetText(TextDataFormat.Xaml);
+ Assert.That(cutXaml, Is.StringContaining(":Name=\"" + _name + "_Copy1\""));
+
+ selection.SetSelectedComponents(new[] {innerGrid});
+ xamlContext.XamlEditAction.Paste();
+ Assert.AreEqual(innerGrid.ContentProperty.CollectionElements[5], selection.PrimarySelection);
+ Assert.AreEqual(_name + "_Copy3", innerGrid.ContentProperty.CollectionElements[5].Name);
+
+ var gridDepObj = grid.Component as DependencyObject;
+ Assert.IsNotNull(gridDepObj);
+ var nameScope = NameScope.GetNameScope(gridDepObj);
+ Assert.IsNotNull(nameScope);
+ Assert.IsNotNull(nameScope.FindName(_name));
+ Assert.IsNotNull(nameScope.FindName(_name + "_Copy"));
+ Assert.IsNotNull(nameScope.FindName(_name + "_Copy1"));
+ Assert.IsNotNull(nameScope.FindName(_name + "_Copy2"));
+ Assert.IsNotNull(nameScope.FindName(_name + "_Copy3"));
+ Assert.IsNull(nameScope.FindName(_name + "_Copy4"));
+ }
}
}
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/ModelTestHelper.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/ModelTestHelper.cs
index 5a7e81211b..90cef16ea0 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/ModelTestHelper.cs
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/ModelTestHelper.cs
@@ -59,14 +59,23 @@ namespace ICSharpCode.WpfDesign.Tests.Designer
return canvasChild;
}
- protected void AssertCanvasDesignerOutput(string expectedXaml, DesignContext context)
+ protected void AssertCanvasDesignerOutput(string expectedXaml, DesignContext context, params String[] additionalXmlns)
{
+ string canvasStartTag =
+ "\n" + expectedXaml.Trim();
+
expectedXaml =
"\n" +
- ("\n" + expectedXaml.Trim())
- .Replace("\r", "").Replace("\n", "\n ")
+ expectedXaml.Replace("\r", "").Replace("\n", "\n ")
+ "\n ";
StringWriter stringWriter = new StringWriter();
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/ModelTests.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/ModelTests.cs
index 1b0c322563..d96af12a6d 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/ModelTests.cs
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/ModelTests.cs
@@ -2,17 +2,19 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
-using System.Text;
-using System.IO;
-using System.Xml;
using System.Diagnostics;
+using System.IO;
+using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
-using NUnit.Framework;
+using System.Windows.Media;
+using System.Xml;
+
using ICSharpCode.WpfDesign.Designer;
-using ICSharpCode.WpfDesign.Designer.Xaml;
using ICSharpCode.WpfDesign.Designer.Services;
+using ICSharpCode.WpfDesign.Designer.Xaml;
+using NUnit.Framework;
namespace ICSharpCode.WpfDesign.Tests.Designer
{
@@ -368,6 +370,34 @@ namespace ICSharpCode.WpfDesign.Tests.Designer
{
AddBindingWithStaticResourceWhereResourceOnSameElement(true);
}
+
+ [Test]
+ public void AddBrushAsResource()
+ {
+ DesignItem checkBox = CreateCanvasContext(" ");
+ DesignItem canvas = checkBox.Parent;
+
+ DesignItemProperty canvasResources = canvas.Properties.GetProperty("Resources");
+
+ DesignItem brush = canvas.Services.Component.RegisterComponentForDesigner(new SolidColorBrush());
+ brush.Key = "testBrush";
+ brush.Properties[SolidColorBrush.ColorProperty].SetValue(Colors.Fuchsia);
+
+ Assert.IsTrue(canvasResources.IsCollection);
+ canvasResources.CollectionElements.Add(brush);
+
+ checkBox.Properties[CheckBox.ForegroundProperty].SetValue(new StaticResourceExtension());
+ DesignItemProperty prop = checkBox.Properties[CheckBox.ForegroundProperty];
+ prop.Value.Properties["ResourceKey"].SetValue("testBrush");
+
+ string expectedXaml = "\n" +
+ " \n" +
+ " \n" +
+ " ";
+
+ AssertCanvasDesignerOutput(expectedXaml, checkBox.Context);
+ AssertLog("");
+ }
}
public class MyMultiConverter : IMultiValueConverter
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/NamespaceTests.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/NamespaceTests.cs
new file mode 100644
index 0000000000..42d41eca2f
--- /dev/null
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/NamespaceTests.cs
@@ -0,0 +1,184 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+using System;
+using System.Windows;
+using System.Windows.Controls;
+
+using NUnit.Framework;
+
+namespace ICSharpCode.WpfDesign.Tests.Designer
+{
+ [TestFixture]
+ public class NamespaceTests : ModelTestHelper
+ {
+
+ [Test]
+ public void AddControlFromTestNamespace()
+ {
+ DesignItem button = CreateCanvasContext(" ");
+
+ DesignItem canvas = button.Parent;
+
+ DesignItem customButton = canvas.Services.Component.RegisterComponentForDesigner(new CustomButton());
+ canvas.Properties["Children"].CollectionElements.Add(customButton);
+
+ AssertCanvasDesignerOutput(" \n" +
+ " ", canvas.Context);
+ }
+
+ [Test]
+ public void AddControlWithUndeclaredNamespace()
+ {
+ DesignItem button = CreateCanvasContext(" ");
+
+ DesignItem canvas = button.Parent;
+
+ DesignItem customButton = canvas.Services.Component.RegisterComponentForDesigner(new ICSharpCode.WpfDesign.Tests.OtherControls.CustomButton());
+ canvas.Properties["Children"].CollectionElements.Add(customButton);
+
+ AssertCanvasDesignerOutput(" \n" +
+ " ",
+ canvas.Context,
+ "xmlns:Controls0=\"clr-namespace:ICSharpCode.WpfDesign.Tests.OtherControls;assembly=ICSharpCode.WpfDesign.Tests\"");
+ }
+
+ [Test]
+ public void AddControlWithUndeclaredNamespaceThatUsesXmlnsPrefixAttribute()
+ {
+ DesignItem button = CreateCanvasContext(" ");
+
+ DesignItem canvas = button.Parent;
+
+ DesignItem customButton = canvas.Services.Component.RegisterComponentForDesigner(new ICSharpCode.WpfDesign.Tests.Controls.CustomButton());
+ canvas.Properties["Children"].CollectionElements.Add(customButton);
+
+ AssertCanvasDesignerOutput(" \n" +
+ " ",
+ canvas.Context,
+ "xmlns:sdtcontrols=\"http://sharpdevelop.net/WpfDesign/Tests/Controls\"");
+ }
+
+ [Test]
+ public void AddMultipleControls()
+ {
+ DesignItem button = CreateCanvasContext(" ");
+
+ DesignItem canvas = button.Parent;
+
+ DesignItem customControl = canvas.Services.Component.RegisterComponentForDesigner(new CustomButton());
+ canvas.Properties["Children"].CollectionElements.Add(customControl);
+
+ customControl = canvas.Services.Component.RegisterComponentForDesigner(new ICSharpCode.WpfDesign.Tests.Controls.CustomButton());
+ canvas.Properties["Children"].CollectionElements.Add(customControl);
+
+ customControl = canvas.Services.Component.RegisterComponentForDesigner(new ICSharpCode.WpfDesign.Tests.OtherControls.CustomButton());
+ canvas.Properties["Children"].CollectionElements.Add(customControl);
+
+ customControl = canvas.Services.Component.RegisterComponentForDesigner(new ICSharpCode.WpfDesign.Tests.SpecialControls.CustomButton());
+ canvas.Properties["Children"].CollectionElements.Add(customControl);
+
+ customControl = canvas.Services.Component.RegisterComponentForDesigner(new CustomCheckBox());
+ canvas.Properties["Children"].CollectionElements.Add(customControl);
+
+ customControl = canvas.Services.Component.RegisterComponentForDesigner(new ICSharpCode.WpfDesign.Tests.Controls.CustomCheckBox());
+ canvas.Properties["Children"].CollectionElements.Add(customControl);
+
+ customControl = canvas.Services.Component.RegisterComponentForDesigner(new ICSharpCode.WpfDesign.Tests.OtherControls.CustomCheckBox());
+ canvas.Properties["Children"].CollectionElements.Add(customControl);
+
+ customControl = canvas.Services.Component.RegisterComponentForDesigner(new ICSharpCode.WpfDesign.Tests.SpecialControls.CustomCheckBox());
+ canvas.Properties["Children"].CollectionElements.Add(customControl);
+
+ AssertCanvasDesignerOutput(" \n" +
+ " \n" +
+ " \n" +
+ " \n" +
+ " \n" +
+ " \n" +
+ " \n" +
+ " \n" +
+ " ",
+ canvas.Context,
+ "xmlns:sdtcontrols=\"http://sharpdevelop.net/WpfDesign/Tests/Controls\"",
+ "xmlns:Controls0=\"clr-namespace:ICSharpCode.WpfDesign.Tests.OtherControls;assembly=ICSharpCode.WpfDesign.Tests\"",
+ "xmlns:Controls1=\"clr-namespace:ICSharpCode.WpfDesign.Tests.SpecialControls;assembly=ICSharpCode.WpfDesign.Tests\"");
+ }
+ }
+
+ public class CustomButton : Button
+ {
+ public static readonly DependencyProperty TestAttachedProperty = DependencyProperty.RegisterAttached("TestAttached", typeof(double), typeof(CustomButton),
+ new FrameworkPropertyMetadata(Double.NaN));
+
+ public static double GetTestAttached(UIElement element)
+ {
+ return (double)element.GetValue(TestAttachedProperty);
+ }
+
+ public static void SetTestAttached(UIElement element, double value)
+ {
+ element.SetValue(TestAttachedProperty, value);
+ }
+ }
+
+ public class CustomCheckBox : CheckBox
+ {
+ }
+}
+
+namespace ICSharpCode.WpfDesign.Tests.Controls
+{
+ public class CustomButton : Button
+ {
+ public static readonly DependencyProperty TestAttachedProperty = DependencyProperty.RegisterAttached("TestAttached", typeof(double), typeof(CustomButton),
+ new FrameworkPropertyMetadata(Double.NaN));
+
+ public static double GetTestAttached(UIElement element)
+ {
+ return (double)element.GetValue(TestAttachedProperty);
+ }
+
+ public static void SetTestAttached(UIElement element, double value)
+ {
+ element.SetValue(TestAttachedProperty, value);
+ }
+ }
+
+ public class CustomCheckBox : CheckBox
+ {
+ }
+}
+
+namespace ICSharpCode.WpfDesign.Tests.OtherControls
+{
+ public class CustomButton : Button
+ {
+ public static readonly DependencyProperty TestAttachedProperty = DependencyProperty.RegisterAttached("TestAttached", typeof(double), typeof(CustomButton),
+ new FrameworkPropertyMetadata(Double.NaN));
+
+ public static double GetTestAttached(UIElement element)
+ {
+ return (double)element.GetValue(TestAttachedProperty);
+ }
+
+ public static void SetTestAttached(UIElement element, double value)
+ {
+ element.SetValue(TestAttachedProperty, value);
+ }
+ }
+
+ public class CustomCheckBox : CheckBox
+ {
+ }
+}
+
+namespace ICSharpCode.WpfDesign.Tests.SpecialControls
+{
+ public class CustomButton : Button
+ {
+ }
+
+ public class CustomCheckBox : CheckBox
+ {
+ }
+}
\ No newline at end of file
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/SetPropertyTests.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/SetPropertyTests.cs
index ac1ee42aa2..5d5a27799b 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/SetPropertyTests.cs
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/SetPropertyTests.cs
@@ -3,6 +3,7 @@
using System;
using System.Windows;
+using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Markup;
@@ -21,20 +22,22 @@ namespace ICSharpCode.WpfDesign.Tests.Designer
AssertCanvasDesignerOutput(" ", button.Context);
}
- [Test, Ignore("Properties are not present in XAML DOM")]
+ [Test]
public void SetContentToStaticResource()
{
DesignItem button = CreateCanvasContext(@" ");
- button.Properties.GetProperty("Content").SetValue(new StaticResourceExtension("MyBrush"));
+ button.Properties.GetProperty("Content").SetValue(new StaticResourceExtension());
+ button.Properties.GetProperty("Content").Value.Properties["ResourceKey"].SetValue("MyBrush");
// TODO : maybe we should support positional arguments from ctors as well => {StaticResource MyBrush}?
AssertCanvasDesignerOutput(" ", button.Context);
}
- [Test, Ignore("Properties are not present in XAML DOM")]
+ [Test]
public void SetContentToXStatic()
{
DesignItem button = CreateCanvasContext(" ");
- button.Properties.GetProperty("Content").SetValue(new StaticExtension("Button.ClickModeProperty"));
+ button.Properties.GetProperty("Content").SetValue(new StaticExtension());
+ button.Properties.GetProperty("Content").Value.Properties["Member"].SetValue("Button.ClickModeProperty");
AssertCanvasDesignerOutput(" ", button.Context);
}
@@ -45,5 +48,54 @@ namespace ICSharpCode.WpfDesign.Tests.Designer
button.Properties.GetProperty("Content").SetValue("Hello World!");
AssertCanvasDesignerOutput(" ", button.Context);
}
+
+ [Test]
+ public void SetAttachedProperties()
+ {
+ DesignItem button = CreateCanvasContext(" ");
+
+ button.Properties.GetAttachedProperty(Grid.ColumnProperty).SetValue(0);
+ button.Properties.GetAttachedProperty(CustomButton.TestAttachedProperty).SetValue(0);
+ button.Properties.GetAttachedProperty(ICSharpCode.WpfDesign.Tests.Controls.CustomButton.TestAttachedProperty).SetValue(0);
+ button.Properties.GetAttachedProperty(ICSharpCode.WpfDesign.Tests.OtherControls.CustomButton.TestAttachedProperty).SetValue(0);
+
+ AssertCanvasDesignerOutput(" ",
+ button.Context,
+ "xmlns:sdtcontrols=\"http://sharpdevelop.net/WpfDesign/Tests/Controls\"",
+ "xmlns:Controls0=\"clr-namespace:ICSharpCode.WpfDesign.Tests.OtherControls;assembly=ICSharpCode.WpfDesign.Tests\"");
+ }
+
+ [Test]
+ public void SetInstanceProperty()
+ {
+ DesignItem button = CreateCanvasContext(" ");
+ button.Properties.GetProperty("Width").SetValue(10);
+ AssertCanvasDesignerOutput(" ", button.Context);
+ }
+
+ [Test]
+ public void SetInstancePropertyElement()
+ {
+ DesignItem button = CreateCanvasContext(" ");
+ DesignItem canvas = button.Parent;
+
+ canvas.Properties.GetProperty(Canvas.TagProperty).SetValue(new ExampleClass());
+
+ DesignItem customControl = canvas.Services.Component.RegisterComponentForDesigner(new ICSharpCode.WpfDesign.Tests.Controls.CustomButton());
+ canvas.Properties["Children"].CollectionElements.Add(customControl);
+ customControl.Properties.GetProperty(ICSharpCode.WpfDesign.Tests.Controls.CustomButton.TagProperty).SetValue(new ExampleClass());
+
+ AssertCanvasDesignerOutput("\n" +
+ " \n" +
+ " \n" +
+ " \n" +
+ "\n" +
+ " \n" +
+ " \n" +
+ " \n" +
+ " ",
+ canvas.Context,
+ "xmlns:sdtcontrols=\"http://sharpdevelop.net/WpfDesign/Tests/Controls\"");
+ }
}
}
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/WpfDesign.Tests.csproj b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/WpfDesign.Tests.csproj
index b83b19e35a..73295de0bd 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/WpfDesign.Tests.csproj
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/WpfDesign.Tests.csproj
@@ -65,6 +65,7 @@
+
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/DesignTimeProperties.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/DesignTimeProperties.cs
index 74cac07867..ef4f4790c4 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/DesignTimeProperties.cs
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/DesignTimeProperties.cs
@@ -112,5 +112,22 @@ namespace ICSharpCode.WpfDesign.XamlDom
DependencyProperty.RegisterAttached("DesignHeight", typeof(double), typeof(DesignTimeProperties));
#endregion
+
+ #region LayoutRounding
+
+ public static bool GetLayoutRounding(DependencyObject obj)
+ {
+ return (bool)obj.GetValue(DesignHeightProperty);
+ }
+
+ public static void SetLayoutRounding(DependencyObject obj, bool value)
+ {
+ obj.SetValue(DesignHeightProperty, value);
+ }
+
+ public static readonly DependencyProperty DesignLayoutRounding =
+ DependencyProperty.RegisterAttached("LayoutRounding", typeof(bool), typeof(DesignTimeProperties));
+
+ #endregion
}
}
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/NameScopeHelper.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/NameScopeHelper.cs
index aac3da5257..d77f74961e 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/NameScopeHelper.cs
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/NameScopeHelper.cs
@@ -10,7 +10,7 @@ namespace ICSharpCode.WpfDesign.XamlDom
///
/// Static methods to help with operations on Xaml elements.
///
- internal static class NameScopeHelper
+ public static class NameScopeHelper
{
///
/// Finds the XAML namescope for the specified object and uses it to unregister the old name and then register the new name.
@@ -18,16 +18,11 @@ namespace ICSharpCode.WpfDesign.XamlDom
/// The object where the name was changed.
/// The old name.
/// The new name.
- public static void NameChanged(XamlObject namedObject, string oldName, string newName)
+ internal static void NameChanged(XamlObject namedObject, string oldName, string newName)
{
var obj = namedObject;
while (obj != null) {
- var nameScope = obj.Instance as INameScope;
- if (nameScope == null) {
- var depObj = obj.Instance as DependencyObject;
- if (depObj != null)
- nameScope = NameScope.GetNameScope(depObj);
- }
+ var nameScope = GetNameScopeFromObject(obj.Instance);
if (nameScope != null) {
if (oldName != null) {
try {
@@ -52,5 +47,33 @@ namespace ICSharpCode.WpfDesign.XamlDom
obj = obj.ParentObject;
}
}
+
+ ///
+ /// Gets the XAML namescope for the specified object.
+ ///
+ /// The object to get the XAML namescope for.
+ /// A XAML namescope, as an instance.
+ public static INameScope GetNameScopeFromObject(object obj)
+ {
+ var nameScope = obj as INameScope;
+ if (nameScope == null) {
+ var depObj = obj as DependencyObject;
+ if (depObj != null)
+ nameScope = NameScope.GetNameScope(depObj);
+ }
+
+ return nameScope;
+ }
+
+ ///
+ /// Clears the if the object is a .
+ ///
+ /// The object to clear the on.
+ public static void ClearNameScopeProperty(object obj)
+ {
+ var depObj = obj as DependencyObject;
+ if (depObj != null)
+ depObj.ClearValue(NameScope.NameScopeProperty);
+ }
}
}
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/XamlDocument.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/XamlDocument.cs
index 452ebd719d..1dfe4892d8 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/XamlDocument.cs
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/XamlDocument.cs
@@ -180,7 +180,7 @@ namespace ICSharpCode.WpfDesign.XamlDom
if (hasStringConverter && XamlObject.GetContentPropertyName(elementType) != null) {
xml.InnerText = c.ConvertToInvariantString(instance);
- } else if (instance is Brush) { // TODO: this is a hacky fix, because Brush Editor doesn't
+ } else if (instance is Brush && forProperty != null) { // TODO: this is a hacky fix, because Brush Editor doesn't
// edit Design Items and so we have no XML, only the Brush
// object and we need to parse the Brush to XAML!
var s = new MemoryStream();
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/XamlParser.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/XamlParser.cs
index 3b05419726..77f10e970f 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/XamlParser.cs
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/XamlParser.cs
@@ -469,6 +469,8 @@ namespace ICSharpCode.WpfDesign.XamlDom
return FindAttachedProperty(typeof(DesignTimeProperties), attribute.LocalName);
} else if (attribute.LocalName == "IsHidden" && attribute.NamespaceURI == XamlConstants.DesignTimeNamespace) {
return FindAttachedProperty(typeof(DesignTimeProperties), attribute.LocalName);
+ } else if (attribute.LocalName == "IsLocked" && attribute.NamespaceURI == XamlConstants.DesignTimeNamespace) {
+ return FindAttachedProperty(typeof(DesignTimeProperties), attribute.LocalName);
}
return null;
diff --git a/src/AddIns/Misc/HelpViewer/HelpViewer.addin b/src/AddIns/Misc/HelpViewer/HelpViewer.addin
index bab09bb5d6..359572ae58 100644
--- a/src/AddIns/Misc/HelpViewer/HelpViewer.addin
+++ b/src/AddIns/Misc/HelpViewer/HelpViewer.addin
@@ -20,30 +20,34 @@
-
-
+
+
-
+
-
-
-
+
+
+
-
+
+
SearchPadControl.xaml
@@ -81,7 +82,7 @@
-
+
Help3OptionsPanel.xaml
@@ -121,6 +122,11 @@
ICSharpCode.Core.Presentation
False
+
+ {857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}
+ ICSharpCode.Core.WinForms
+ False
+
\ No newline at end of file
diff --git a/src/AddIns/Misc/HelpViewer/Source/Commands.cs b/src/AddIns/Misc/HelpViewer/Source/Commands.cs
index 03b7e8dca0..75b3030de4 100644
--- a/src/AddIns/Misc/HelpViewer/Source/Commands.cs
+++ b/src/AddIns/Misc/HelpViewer/Source/Commands.cs
@@ -5,11 +5,12 @@ using System;
using System.Diagnostics;
using System.IO;
using System.Linq;
-using Microsoft.Win32;
-using MSHelpSystem.Core;
-using MSHelpSystem.Controls;
+
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop;
+using ICSharpCode.SharpDevelop.Gui;
+using MSHelpSystem.Controls;
+using MSHelpSystem.Core;
namespace MSHelpSystem.Commands
{
@@ -27,13 +28,13 @@ namespace MSHelpSystem.Commands
return;
if (Help3Environment.IsHelp3ProtocolRegistered) {
- LoggingService.Debug(string.Format("Help 3.0: Getting description of \"{0}\"", code));
+ LoggingService.Debug(string.Format("HelpViewer: Getting description of \"{0}\"", code));
if (Help3Environment.IsLocalHelp)
DisplayHelp.Keywords(code);
else
DisplayHelp.ContextualHelp(code);
} else {
- LoggingService.Error("Help 3.0: Help system ist not initialized");
+ LoggingService.Error("HelpViewer: Help system ist not initialized");
}
}
}
@@ -43,6 +44,12 @@ namespace MSHelpSystem.Commands
{
public override void Run()
{
+ if (!Help3Environment.IsHelp3ProtocolRegistered) {
+ using (HelpLibraryManagerNotFoundForm form = new HelpLibraryManagerNotFoundForm()) {
+ form.ShowDialog(WorkbenchSingleton.MainWin32Window);
+ }
+ return;
+ }
if (Help3Service.Config.ExternalHelp) DisplayHelp.Catalog();
else {
PadDescriptor toc = SD.Workbench.GetPad(typeof(Help3TocPad));
@@ -55,6 +62,12 @@ namespace MSHelpSystem.Commands
{
public override void Run()
{
+ if (!Help3Environment.IsHelp3ProtocolRegistered) {
+ using (HelpLibraryManagerNotFoundForm form = new HelpLibraryManagerNotFoundForm()) {
+ form.ShowDialog(WorkbenchSingleton.MainWin32Window);
+ }
+ return;
+ }
PadDescriptor search = SD.Workbench.GetPad(typeof(Help3SearchPad));
if (search != null) search.BringPadToFront();
}
@@ -64,24 +77,13 @@ namespace MSHelpSystem.Commands
{
public override void Run()
{
- string path;
- using (var key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Help\v1.0")) {
- path = key != null ? key.GetValue("AppRoot") as string : null;
- }
- if (string.IsNullOrEmpty(path)) {
- MessageService.ShowError("${res:AddIns.HelpViewer.HLMNotFound}");
- return;
- }
- path = Path.Combine(path, "HelpLibManager.exe");
- if (!File.Exists(path)) {
- MessageService.ShowError("${res:AddIns.HelpViewer.HLMNotFound}");
- return;
- }
- if (string.IsNullOrEmpty(Help3Service.Config.ActiveCatalogId)) {
- MessageService.ShowError("${res:AddIns.HelpViewer.HLMNoActiveCatalogError}");
+ if (string.IsNullOrEmpty(HelpLibraryManager.Manager)) {
+ using (HelpLibraryManagerNotFoundForm form = new HelpLibraryManagerNotFoundForm()) {
+ form.ShowDialog(WorkbenchSingleton.MainWin32Window);
+ }
return;
}
- Process.Start(path, string.Format("/product {0} /version {1} /locale {2}", Help3Service.Config.ActiveCatalogId.Split('/')));
+ HelpLibraryManager.Start();
}
}
}
diff --git a/src/AddIns/Misc/HelpViewer/Source/Controls/HelpLibraryManagerNotFound.cs b/src/AddIns/Misc/HelpViewer/Source/Controls/HelpLibraryManagerNotFound.cs
new file mode 100644
index 0000000000..c58db298fd
--- /dev/null
+++ b/src/AddIns/Misc/HelpViewer/Source/Controls/HelpLibraryManagerNotFound.cs
@@ -0,0 +1,21 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using System;
+using System.Diagnostics;
+using System.Windows.Forms;
+using ICSharpCode.Core;
+using ICSharpCode.Core.WinForms;
+using ICSharpCode.SharpDevelop.Gui;
+
+namespace MSHelpSystem.Controls
+{
+ public class HelpLibraryManagerNotFoundForm : ToolNotFoundDialog
+ {
+ public HelpLibraryManagerNotFoundForm()
+ : base(StringParser.Parse("${res:AddIns.HelpViewer.HLMNotAvailableDownloadWinSDK}"),
+ "http://www.microsoft.com/en-us/download/details.aspx?id=8279", null)
+ {
+ }
+ }
+}
diff --git a/src/AddIns/Misc/HelpViewer/Source/Controls/SearchPadControl.xaml b/src/AddIns/Misc/HelpViewer/Source/Controls/SearchPadControl.xaml
index d7abed2a5f..0fa4ce8ef2 100644
--- a/src/AddIns/Misc/HelpViewer/Source/Controls/SearchPadControl.xaml
+++ b/src/AddIns/Misc/HelpViewer/Source/Controls/SearchPadControl.xaml
@@ -1,7 +1,8 @@
-
+
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:core="http://icsharpcode.net/sharpdevelop/core">
diff --git a/src/AddIns/Misc/HelpViewer/Source/Controls/TocEntry.cs b/src/AddIns/Misc/HelpViewer/Source/Controls/TocEntry.cs
index 21702f702a..7ea43034fe 100644
--- a/src/AddIns/Misc/HelpViewer/Source/Controls/TocEntry.cs
+++ b/src/AddIns/Misc/HelpViewer/Source/Controls/TocEntry.cs
@@ -9,6 +9,7 @@ using System.Linq;
using System.Net;
using System.Reflection;
using System.Runtime.InteropServices;
+using System.Web;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
@@ -35,14 +36,14 @@ namespace MSHelpSystem.Controls
client.DownloadStringCompleted += (_, e) =>
{
try {
- LoggingService.Debug(string.Format("Help 3.0: title \"{0}\"", Title));
+ LoggingService.Debug(string.Format("HelpViewer: TocEntry \"{0}\" found", Title));
var children = XElement.Parse(e.Result);
Children = children.Elements("topic")
- .Select(link => new TocEntry(link.Attribute("id").Value) { Title = link.Element("title").Value })
+ .Select(link => new TocEntry(link.Attribute("id").Value) { Title = WebUtility.HtmlDecode(link.Element("title").Value) })
.ToArray();
} catch (TargetInvocationException ex) {
// Exception when fetching e.Result:
- LoggingService.Warn(ex);
+ LoggingService.Error(ex.ToString());
this.children = defaultChild;
}
client.Dispose();
@@ -58,8 +59,7 @@ namespace MSHelpSystem.Controls
public IEnumerable Children
{
- get
- {
+ get {
if (Help3Service.ActiveCatalog != null) {
if (children == null && !client.IsBusy && HelpLibraryAgent.PortIsReady) {
client.DownloadStringAsync(new Uri(Help3Environment.GetHttpFromMsXHelp(string.Format(url, Help3Service.ActiveCatalog.AsMsXHelpParam, id))));
@@ -67,8 +67,7 @@ namespace MSHelpSystem.Controls
}
return children ?? defaultChild;
}
- private set
- {
+ private set {
children = value;
RaisePropertyChanged("Children");
}
@@ -81,5 +80,5 @@ namespace MSHelpSystem.Controls
System.ComponentModel.PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null) handler(this, new System.ComponentModel.PropertyChangedEventArgs(name));
}
- }
+ }
}
diff --git a/src/AddIns/Misc/HelpViewer/Source/Controls/TocPadControl.xaml b/src/AddIns/Misc/HelpViewer/Source/Controls/TocPadControl.xaml
index 4be583f5c6..9ed779ecd3 100644
--- a/src/AddIns/Misc/HelpViewer/Source/Controls/TocPadControl.xaml
+++ b/src/AddIns/Misc/HelpViewer/Source/Controls/TocPadControl.xaml
@@ -1,6 +1,8 @@

-
+
Items
{
- get
- {
+ get {
ReadOnlyCollection c = new ReadOnlyCollection(catalogs);
return c;
}
@@ -133,12 +131,10 @@ namespace MSHelpSystem.Core
public static string ActiveCatalogId
{
- get
- {
+ get {
return config.ActiveCatalogId;
}
- set
- {
+ set {
config.ActiveCatalogId = value;
OnCatalogChanged(EventArgs.Empty);
}
@@ -167,10 +163,10 @@ namespace MSHelpSystem.Core
TextReader file = new StreamReader(configFile);
config = (Help3Configuration)serialize.Deserialize(file);
file.Close();
- LoggingService.Info("Help 3.0: Configuration successfully loaded");
+ LoggingService.Info("HelpViewer: Configuration successfully loaded");
}
catch (Exception ex) {
- LoggingService.Error(string.Format("Help 3.0: {0}", ex.ToString()));
+ LoggingService.Error(string.Format("HelpViewer: {0}", ex.ToString()));
}
OnConfigurationUpdated(EventArgs.Empty);
}
@@ -183,10 +179,10 @@ namespace MSHelpSystem.Core
TextWriter file = new StreamWriter(configFile);
serialize.Serialize(file, config);
file.Close();
- LoggingService.Info("Help 3.0: Configuration successfully saved");
+ LoggingService.Info("HelpViewer: Configuration successfully saved");
}
catch (Exception ex) {
- LoggingService.Error(string.Format("Help 3.0: {0}", ex.ToString()));
+ LoggingService.Error(string.Format("HelpViewer: {0}", ex.ToString()));
}
OnConfigurationUpdated(EventArgs.Empty);
}
@@ -201,19 +197,19 @@ namespace MSHelpSystem.Core
static void OnCatalogsUpdated(EventArgs e)
{
- LoggingService.Debug("Help 3.0: \"OnCatalogsUpdated\" event raised");
+ LoggingService.Debug("HelpViewer: OnCatalogsUpdated event raised");
if (CatalogsUpdated != null) CatalogsUpdated(null, e);
}
static void OnCatalogChanged(EventArgs e)
{
- LoggingService.Debug("Help 3.0: \"OnCatalogChanged\" event raised");
+ LoggingService.Debug("HelpViewer: OnCatalogChanged event raised");
if (CatalogChanged != null) CatalogChanged(null, e);
}
static void OnConfigurationUpdated(EventArgs e)
{
- LoggingService.Debug("Help 3.0: \"OnConfigurationUpdated\" event raised");
+ LoggingService.Debug("HelpViewer: OnConfigurationUpdated event raised");
if (ConfigurationUpdated != null) ConfigurationUpdated(null, e);
}
diff --git a/src/AddIns/Misc/HelpViewer/Source/Core/HelpLibraryAgent.cs b/src/AddIns/Misc/HelpViewer/Source/Core/HelpLibraryAgent.cs
index 592f5d59fc..7e01d50fd7 100644
--- a/src/AddIns/Misc/HelpViewer/Source/Core/HelpLibraryAgent.cs
+++ b/src/AddIns/Misc/HelpViewer/Source/Core/HelpLibraryAgent.cs
@@ -19,29 +19,26 @@ namespace MSHelpSystem.Core
public static bool IsRunning
{
- get
- {
+ get {
Process[] agents = Process.GetProcessesByName("HelpLibAgent");
- LoggingService.Debug(string.Format("Help 3.0: {0} {1} of HelpLibraryAgent.exe found", agents.Length, (agents.Length == 1)?"process":"processes"));
+ LoggingService.Debug(string.Format("HelpViewer: {0} HelpLibraryAgent {1} found", agents.Length, (agents.Length == 1)?"process":"processes"));
return agents.Length > 0;
}
}
public static string Agent
{
- get
- {
+ get {
if (string.IsNullOrEmpty(Help3Environment.AppRoot)) return string.Empty;
string agent = Path.Combine(Help3Environment.AppRoot, "HelpLibAgent.exe");
- LoggingService.Debug(string.Format("Help 3.0: Help library agent is \"{0}\"", agent));
+ LoggingService.Debug(string.Format("HelpViewer: HelpLibraryAgent is \"{0}\"", agent));
return (File.Exists(agent)) ? agent : string.Empty;
}
}
public static int PortNumber
{
- get
- {
+ get {
try {
RegistryKey hklm = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64).OpenSubKey(@"SOFTWARE\Microsoft\Help\v1.0", false);
string port = (string)hklm.GetValue("AgentPort", "47873");
@@ -49,7 +46,7 @@ namespace MSHelpSystem.Core
return Convert.ToInt32(port);
}
catch (Exception ex) {
- LoggingService.Error(string.Format("Help 3.0: {0}", ex.ToString()));
+ LoggingService.Error(string.Format("HelpViewer: {0}", ex.ToString()));
}
return 47873; // This is the DEFAULT port number!
}
@@ -57,8 +54,7 @@ namespace MSHelpSystem.Core
public static bool PortIsReady
{
- get
- {
+ get {
try {
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket.Connect(IPAddress.Parse("127.0.0.1"), PortNumber);
@@ -68,10 +64,10 @@ namespace MSHelpSystem.Core
}
catch (SocketException ex) {
if (ex.ErrorCode == 10061) {
- LoggingService.Debug("Help 3.0: Port is available but not ready");
+ LoggingService.Debug("HelpViewer: Port is available but not ready");
return true;
}
- LoggingService.Error(string.Format("Help 3.0: {0}", ex.ToString()));
+ LoggingService.Error(string.Format("HelpViewer: {0}", ex.ToString()));
}
return false;
}
@@ -79,19 +75,17 @@ namespace MSHelpSystem.Core
public static int ProcessId
{
- get
- {
+ get {
Process[] agents = Process.GetProcessesByName("HelpLibAgent");
int processId = (agents.Length > 0) ? agents[0].Id:0;
- LoggingService.Debug(string.Format("Help 3.0: Help library agent has the process ID \"{0}\"", processId));
+ LoggingService.Debug(string.Format("HelpViewer: HelpLibraryAgent has process ID \"{0}\"", processId));
return processId;
}
}
public static string CurrentViewer
{
- get
- {
+ get {
string viewer = string.Empty;
try {
RegistryKey hklm = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64).OpenSubKey(@"SOFTWARE\Microsoft\Help\v1.0", false);
@@ -107,9 +101,9 @@ namespace MSHelpSystem.Core
}
}
catch (Exception ex) {
- LoggingService.Error(string.Format("Help 3.0: {0}", ex.ToString()));
+ LoggingService.Error(string.Format("HelpViewer: {0}", ex.ToString()));
}
- LoggingService.Debug(string.Format("Help 3.0: Default viewer is \"{0}\"", viewer));
+ LoggingService.Debug(string.Format("HelpViewer: Default viewer is \"{0}\"", viewer));
return viewer;
}
}
@@ -121,11 +115,11 @@ namespace MSHelpSystem.Core
try {
Process p = Process.Start(Agent);
p.WaitForInputIdle();
- LoggingService.Info("Help 3.0: Help library agent started");
+ LoggingService.Info("HelpViewer: HelpLibraryAgent started");
return IsRunning;
}
catch (Exception ex) {
- LoggingService.Error(string.Format("Help 3.0: {0}", ex.ToString()));
+ LoggingService.Error(string.Format("HelpViewer: {0}", ex.ToString()));
}
return false;
}
@@ -144,10 +138,10 @@ namespace MSHelpSystem.Core
agent.Kill();
if (waitForExit) agent.WaitForExit();
}
- LoggingService.Debug(string.Format("Help 3.0: {0} {1} of HelpLibraryAgent.exe stopped", agents.Length, (agents.Length == 1)?"process":"processes"));
+ LoggingService.Debug(string.Format("HelpViewer: {0} HelpLibraryAgent {1} stopped", agents.Length, (agents.Length == 1)?"process":"processes"));
}
catch (Exception ex) {
- LoggingService.Error(string.Format("Help 3.0: {0}", ex.ToString()));
+ LoggingService.Error(string.Format("HelpViewer: {0}", ex.ToString()));
}
return true;
}
diff --git a/src/AddIns/Misc/HelpViewer/Source/Core/HelpLibraryManager.cs b/src/AddIns/Misc/HelpViewer/Source/Core/HelpLibraryManager.cs
index 2af0d87c09..6fb51796f3 100644
--- a/src/AddIns/Misc/HelpViewer/Source/Core/HelpLibraryManager.cs
+++ b/src/AddIns/Misc/HelpViewer/Source/Core/HelpLibraryManager.cs
@@ -18,21 +18,19 @@ namespace MSHelpSystem.Core
public static bool IsRunning
{
- get
- {
+ get {
Process[] managers = Process.GetProcessesByName("HelpLibManager");
- LoggingService.Debug(string.Format("Help 3.0: {0} {1} of HelpLibraryManager.exe found", managers.Length, (managers.Length == 1)?"process":"processes"));
+ LoggingService.Debug(string.Format("HelpViewer: {0} HelpLibraryManager {1} found", managers.Length, (managers.Length == 1)?"process":"processes"));
return managers.Length > 0;
}
}
public static string Manager
{
- get
- {
+ get {
if (string.IsNullOrEmpty(Help3Environment.AppRoot)) return string.Empty;
string manager = Path.Combine(Help3Environment.AppRoot, "HelpLibManager.exe");
- LoggingService.Debug(string.Format("Help 3.0: Help library manager is \"{0}\"", manager));
+ LoggingService.Debug(string.Format("HelpViewer: HelpLibraryManager is \"{0}\"", manager));
return (File.Exists(manager)) ? manager : string.Empty;
}
}
@@ -61,7 +59,7 @@ namespace MSHelpSystem.Core
string brandingSwitch = (!string.IsNullOrEmpty(brandingPackage)) ? string.Format("/brandingPackage \"{0}\"", brandingPackage):"";
string arguments = string.Format("/product {0} /version {1} /locale {2} /content \"{3}\" {4}", productCode, productVersion, locale, Help3Environment.BuildLocalStoreFolder, brandingSwitch);
- LoggingService.Debug(string.Format("Help 3.0: Initializing local store with \"{0}\"", arguments));
+ LoggingService.Debug(string.Format("HelpViewer: Initializing local store with \"{0}\"", arguments));
HelpLibManagerProcessRunner(arguments);
}
@@ -88,7 +86,7 @@ namespace MSHelpSystem.Core
string brandingSwitch = (!string.IsNullOrEmpty(brandingPackage)) ? string.Format("/brandingPackage \"{0}\"", brandingPackage):"";
string arguments = string.Format("/product {0} /version {1} /locale {2} /sourceMedia \"{3}\" {4} {5}", productCode, productVersion, locale, sourceMedia, initLS, brandingSwitch);
- LoggingService.Debug(string.Format("Help 3.0: Installing local help documents with \"{0}\"", arguments));
+ LoggingService.Debug(string.Format("HelpViewer: Installing local help documents with \"{0}\"", arguments));
HelpLibManagerProcessRunner(arguments);
}
@@ -114,7 +112,7 @@ namespace MSHelpSystem.Core
string brandingSwitch = (!string.IsNullOrEmpty(brandingPackage)) ? string.Format("/brandingPackage \"{0}\"", brandingPackage):"";
string arguments = string.Format("/product {0} /version {1} /locale {2} /sourceWeb \"{3}\" {4} {5}", productCode, productVersion, locale, sourceWeb, initLS, brandingSwitch);
- LoggingService.Debug(string.Format("Help 3.0: Installing help documents from web with \"{0}\"", arguments));
+ LoggingService.Debug(string.Format("HelpViewer: Installing help documents from web with \"{0}\"", arguments));
HelpLibManagerProcessRunner(arguments);
}
@@ -136,7 +134,7 @@ namespace MSHelpSystem.Core
string arguments = string.Format("/product {0} /version {1} /locale {2} /vendor \"{3}\" /productName \"{4}\" /mediaBookList {5} /uninstall", productCode, productVersion, locale, vendor, productName, mediaBookList);
- LoggingService.Debug(string.Format("Help 3.0: Uninstalling help documents with \"{0}\"", arguments));
+ LoggingService.Debug(string.Format("HelpViewer: Uninstalling help documents with \"{0}\"", arguments));
HelpLibManagerProcessRunner(arguments);
}
@@ -166,13 +164,17 @@ namespace MSHelpSystem.Core
return p.ExitCode;
}
catch (Exception ex) {
- LoggingService.Error(string.Format("Help 3.0: {0}", ex.ToString()));
+ LoggingService.Error(string.Format("HelpViewer: {0}", ex.ToString()));
}
return -1;
}
-
public static bool Start()
+ {
+ return Start(false);
+ }
+
+ public static bool Start(bool runPrivileged)
{
if (IsRunning) return true;
if (string.IsNullOrEmpty(Manager)) {
@@ -186,16 +188,16 @@ namespace MSHelpSystem.Core
psi.WorkingDirectory = Help3Environment.AppRoot;
psi.Arguments = Help3Service.ActiveCatalog.AsCmdLineParam;
psi.UseShellExecute = true;
- psi.Verb = "runas";
+ if (runPrivileged) psi.Verb = "runas";
psi.WindowStyle = ProcessWindowStyle.Normal;
try {
Process p = Process.Start(psi);
p.WaitForInputIdle();
- LoggingService.Info("Help 3.0: Help library manager started");
+ LoggingService.Info("HelpViewer: HelpLibraryManager started");
return IsRunning;
}
catch (Exception ex) {
- LoggingService.Error(string.Format("Help 3.0: {0}", ex.ToString()));
+ LoggingService.Error(string.Format("HelpViewer: {0}", ex.ToString()));
}
return false;
}
@@ -214,10 +216,10 @@ namespace MSHelpSystem.Core
manager.Kill();
if (waitForExit) manager.WaitForExit();
}
- LoggingService.Debug(string.Format("Help 3.0: {0} {1} of HelpLibraryManager.exe stopped", managers.Length, (managers.Length == 1)?"process":"processes"));
+ LoggingService.Debug(string.Format("HelpViewer: {0} HelpLibraryManager {1} stopped", managers.Length, (managers.Length == 1)?"process":"processes"));
}
catch (Exception ex) {
- LoggingService.Error(string.Format("Help 3.0: {0}", ex.ToString()));
+ LoggingService.Error(string.Format("HelpViewer: {0}", ex.ToString()));
}
return true;
}
diff --git a/src/AddIns/Misc/HelpViewer/Source/Help3OptionsPanel.xaml.cs b/src/AddIns/Misc/HelpViewer/Source/Help3OptionsPanel.xaml.cs
index 5902784459..c0f4b0e63e 100644
--- a/src/AddIns/Misc/HelpViewer/Source/Help3OptionsPanel.xaml.cs
+++ b/src/AddIns/Misc/HelpViewer/Source/Help3OptionsPanel.xaml.cs
@@ -49,22 +49,22 @@ namespace MSHelpSystem
void Help3OfflineModeClicked(object sender, RoutedEventArgs e)
{
- LoggingService.Info("Help 3.0: Setting help mode to \"offline\"");
Help3Service.Config.OfflineMode = true;
help3Catalogs.IsEnabled = (help3Catalogs.Items.Count > 1 && Help3Service.Config.OfflineMode);
+ LoggingService.Info("HelpViewer: Help mode set to \"offline\"");
}
void Help3OnlineModeClicked(object sender, RoutedEventArgs e)
{
- LoggingService.Info("Help 3.0: Setting help mode to \"online\"");
Help3Service.Config.OfflineMode = false;
help3Catalogs.IsEnabled = false;
+ LoggingService.Info("HelpViewer: Help mode set to \"online\"");
}
void Help3UseExternalHelpClicked(object sender, RoutedEventArgs e)
{
Help3Service.Config.ExternalHelp = (bool)externalHelp.IsChecked;
- LoggingService.Info(string.Format("Help 3.0: {0} external help", (Help3Service.Config.ExternalHelp)?"Enabling":"Disabling"));
+ LoggingService.Info(string.Format("HelpViewer: External help viewer {0}", (Help3Service.Config.ExternalHelp)?"enabled":"disabled"));
}
public override bool SaveOptions()
diff --git a/src/AddIns/Misc/HelpViewer/Source/Helper/HelpClientWatcher.cs b/src/AddIns/Misc/HelpViewer/Source/Helper/HelpClientWatcher.cs
index b773d520e3..534b338e92 100644
--- a/src/AddIns/Misc/HelpViewer/Source/Helper/HelpClientWatcher.cs
+++ b/src/AddIns/Misc/HelpViewer/Source/Helper/HelpClientWatcher.cs
@@ -97,7 +97,7 @@ namespace MSHelpSystem.Helper
}
}
catch (Exception ex) {
- LoggingService.Error(string.Format("Help 3.0: {0}", ex.ToString()));
+ LoggingService.Error(string.Format("HelpViewer: {0}", ex.ToString()));
}
return "offline";
}
@@ -105,7 +105,7 @@ namespace MSHelpSystem.Helper
static void SetHelpMode()
{
clientFileChanged.EnableRaisingEvents = false;
- LoggingService.Info(string.Format("Help 3.0: Trying to set Help mode to \"{0}\"", helpMode));
+ LoggingService.Info(string.Format("HelpViewer: Trying to set help mode to \"{0}\"", helpMode));
Configuration config = null;
try {
@@ -136,7 +136,7 @@ namespace MSHelpSystem.Helper
}
}
catch (Exception ex) {
- LoggingService.Error(string.Format("Help 3.0: {0}", ex.ToString()));
+ LoggingService.Error(string.Format("HelpViewer: {0}", ex.ToString()));
}
clientFileChanged.EnableRaisingEvents = true;
}
diff --git a/src/AddIns/Misc/HelpViewer/Source/Helper/ProjectLanguages.cs b/src/AddIns/Misc/HelpViewer/Source/Helper/ProjectLanguages.cs
index 3a1c22fe90..9af7b6fc04 100644
--- a/src/AddIns/Misc/HelpViewer/Source/Helper/ProjectLanguages.cs
+++ b/src/AddIns/Misc/HelpViewer/Source/Helper/ProjectLanguages.cs
@@ -23,33 +23,39 @@ namespace MSHelpSystem.Helper
Dictionary result = new Dictionary();
result.Add("C++", "C%2B%2B");
result.Add("C#", "CSharp");
+ result.Add("F#", "FSharp");
result.Add("VBNet", "VB");
return result;
}
#endregion
- public static string GetCurrentLanguage()
+ public static string CurrentLanguage
{
- string output = string.Empty;
- if (ProjectService.CurrentProject != null) {
- string devLang = ProjectService.CurrentProject.Language;
- if (string.IsNullOrEmpty(devLang)) { throw new ArgumentNullException("devLang"); }
- output = devLang;
-
- if (!languages.ContainsKey(devLang) || !languages.TryGetValue(devLang, out output)) {
- output = devLang;
+ get {
+ string output = string.Empty;
+
+ if (ProjectService.CurrentProject != null) {
+ string devLang = ProjectService.CurrentProject.Language;
+ if (string.IsNullOrEmpty(devLang)) {
+ throw new ArgumentNullException("devLang");
+ }
+ if (!languages.ContainsKey(devLang) || !languages.TryGetValue(devLang, out output)) {
+ output = devLang;
+ }
+ LoggingService.Debug(string.Format("HelpViewer: Project language \"{0}\" formatted to \"{1}\"", devLang, output));
}
- LoggingService.Debug(string.Format("Help 3.0: Project language \"{0}\" formatted to \"{1}\"", devLang, output));
+ return output.ToLower();
}
- return output.ToLower();
}
- public static string GetCurrentLanguageAsHttpParam()
+ public static string CurrentLanguageAsHttpParam
{
- string devLang = GetCurrentLanguage();
- if (string.IsNullOrEmpty(devLang)) return string.Empty;
- else return string.Format("&category=DevLang%3a{0}", devLang);
+ get {
+ string devLang = CurrentLanguage;
+ if (string.IsNullOrEmpty(devLang)) return string.Empty;
+ else return string.Format("&category=DevLang%3a{0}", devLang);
+ }
}
}
}
diff --git a/src/AddIns/Misc/HelpViewer/Source/MSHelp3Provider.cs b/src/AddIns/Misc/HelpViewer/Source/MSHelp3Provider.cs
index 312fd538d4..5b8d8e846e 100644
--- a/src/AddIns/Misc/HelpViewer/Source/MSHelp3Provider.cs
+++ b/src/AddIns/Misc/HelpViewer/Source/MSHelp3Provider.cs
@@ -15,7 +15,7 @@ namespace MSHelpSystem
if (string.IsNullOrEmpty(fullTypeName)) {
throw new ArgumentNullException("fullTypeName");
}
- LoggingService.Info(string.Format("Help 3.0: Calling \"TryShowHelp\" with {0}", fullTypeName));
+ LoggingService.Info(string.Format("HelpViewer: TryShowHelp calls \"{0}\"", fullTypeName));
return DisplayHelp.ContextualHelp(fullTypeName);
}
@@ -24,7 +24,7 @@ namespace MSHelpSystem
if (string.IsNullOrEmpty(keyword)) {
throw new ArgumentNullException("keyword");
}
- LoggingService.Info(string.Format("Help 3.0: Calling \"TryShowHelpByKeyword\" with {0}", keyword));
+ LoggingService.Info(string.Format("HelpViewer: TryShowHelpByKeyword calls \"{0}\"", keyword));
DisplayHelp.Keywords(keyword);
return true;
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/IPackageRepositoryExtensions.cs b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageRepositoryExtensions.cs
index bd3577e50c..04a0878a43 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/IPackageRepositoryExtensions.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageRepositoryExtensions.cs
@@ -8,14 +8,14 @@ namespace ICSharpCode.PackageManagement
{
public static class IPackageRepositoryExtensions
{
- public static IDisposable StartInstallOperation(this IPackageRepository repository, string mainPackageId = null)
+ public static IDisposable StartInstallOperation(this IPackageRepository repository, string mainPackageId = null, string mainPackageVersion = null)
{
- return repository.StartOperation(RepositoryOperationNames.Install, mainPackageId);
+ return repository.StartOperation(RepositoryOperationNames.Install, mainPackageId, mainPackageVersion);
}
- public static IDisposable StartUpdateOperation(this IPackageRepository repository, string mainPackageId = null)
+ public static IDisposable StartUpdateOperation(this IPackageRepository repository, string mainPackageId = null, string mainPackageVersion = null)
{
- return repository.StartOperation(RepositoryOperationNames.Update, mainPackageId);
+ return repository.StartOperation(RepositoryOperationNames.Update, mainPackageId, mainPackageVersion);
}
}
}
diff --git a/src/AddIns/Misc/PackageManagement/RequiredLibraries/Microsoft.Web.XmlTransform.dll b/src/AddIns/Misc/PackageManagement/RequiredLibraries/Microsoft.Web.XmlTransform.dll
index c2f8e2ec44..26e7d87ab0 100644
Binary files a/src/AddIns/Misc/PackageManagement/RequiredLibraries/Microsoft.Web.XmlTransform.dll and b/src/AddIns/Misc/PackageManagement/RequiredLibraries/Microsoft.Web.XmlTransform.dll differ
diff --git a/src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.Console.Types.dll b/src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.Console.Types.dll
index 6af49f2159..13760996bd 100644
Binary files a/src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.Console.Types.dll and b/src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.Console.Types.dll differ
diff --git a/src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.Core.dll b/src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.Core.dll
index 42f78f234b..7bb96453d5 100644
Binary files a/src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.Core.dll and b/src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.Core.dll differ
diff --git a/src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.exe b/src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.exe
index 7a59749d17..63c19c97db 100644
Binary files a/src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.exe and b/src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.exe differ
diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeOperationAwarePackageRepository.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeOperationAwarePackageRepository.cs
index 8b1bd2a5ef..646e1cb37c 100644
--- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeOperationAwarePackageRepository.cs
+++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeOperationAwarePackageRepository.cs
@@ -16,7 +16,7 @@ namespace PackageManagement.Tests.Helpers
IDisposable Operation = MockRepository.GenerateStub();
- public IDisposable StartOperation(string operationName, string mainPackageId)
+ public IDisposable StartOperation(string operationName, string mainPackageId, string mainPackageVersion)
{
OperationStarted = operationName;
MainPackageIdForOperationStarted = mainPackageId;
diff --git a/src/AddIns/VersionControl/SubversionAddIn/Src/Commands/AutostartCommands.cs b/src/AddIns/VersionControl/SubversionAddIn/Src/Commands/AutostartCommands.cs
index 7a8c819376..f09ac37ce8 100644
--- a/src/AddIns/VersionControl/SubversionAddIn/Src/Commands/AutostartCommands.cs
+++ b/src/AddIns/VersionControl/SubversionAddIn/Src/Commands/AutostartCommands.cs
@@ -232,48 +232,53 @@ namespace ICSharpCode.Svn.Commands
using (SvnClientWrapper client = new SvnClientWrapper()) {
SvnMessageView.HandleNotifications(client);
- Status status = client.SingleStatus(fullName);
- switch (status.TextStatus) {
- case StatusKind.None:
- case StatusKind.Unversioned:
- case StatusKind.Ignored:
- break;
- default:
- // must be done using the subversion client, even if
- // AutomaticallyDeleteFiles is off, because we don't want to corrupt the
- // working copy
- e.OperationAlreadyDone = true;
- try {
- client.Delete(new string[] { fullName }, false);
- } catch (SvnClientException ex) {
- LoggingService.Warn("SVN Error" + ex);
- LoggingService.Warn(ex);
-
- if (ex.IsKnownError(KnownError.CannotDeleteFileWithLocalModifications)
- || ex.IsKnownError(KnownError.CannotDeleteFileNotUnderVersionControl))
- {
- if (MessageService.ShowCustomDialog("${res:AddIns.Subversion.DeleteDirectory}",
- StringParser.Parse("${res:AddIns.Subversion.ErrorDelete}:\n",
- new StringTagPair("File", fullName)) +
- ex.Message, 0, 1,
- "${res:AddIns.Subversion.ForceDelete}", "${res:Global.CancelButtonText}")
- == 0)
+ try {
+ Status status = client.SingleStatus(fullName);
+ switch (status.TextStatus) {
+ case StatusKind.None:
+ case StatusKind.Unversioned:
+ case StatusKind.Ignored:
+ break;
+ default:
+ // must be done using the subversion client, even if
+ // AutomaticallyDeleteFiles is off, because we don't want to corrupt the
+ // working copy
+ e.OperationAlreadyDone = true;
+ try {
+ client.Delete(new string[] { fullName }, false);
+ } catch (SvnClientException ex) {
+ LoggingService.Warn("SVN Error" + ex);
+ LoggingService.Warn(ex);
+
+ if (ex.IsKnownError(KnownError.CannotDeleteFileWithLocalModifications)
+ || ex.IsKnownError(KnownError.CannotDeleteFileNotUnderVersionControl))
{
- try {
- client.Delete(new string[] { fullName }, true);
- } catch (SvnClientException ex2) {
+ if (MessageService.ShowCustomDialog("${res:AddIns.Subversion.DeleteDirectory}",
+ StringParser.Parse("${res:AddIns.Subversion.ErrorDelete}:\n",
+ new StringTagPair("File", fullName)) +
+ ex.Message, 0, 1,
+ "${res:AddIns.Subversion.ForceDelete}", "${res:Global.CancelButtonText}")
+ == 0)
+ {
+ try {
+ client.Delete(new string[] { fullName }, true);
+ } catch (SvnClientException ex2) {
+ e.Cancel = true;
+ MessageService.ShowError(ex2.Message);
+ }
+ } else {
e.Cancel = true;
- MessageService.ShowError(ex2.Message);
}
} else {
e.Cancel = true;
+ MessageService.ShowError(ex.Message);
}
- } else {
- e.Cancel = true;
- MessageService.ShowError(ex.Message);
}
- }
- break;
+ break;
+ }
+ } catch (SvnClientException ex3) {
+ e.Cancel = true;
+ MessageService.ShowError(ex3.Message);
}
}
return;
diff --git a/src/Libraries/SharpSvn/Licenses/Putty-License.txt b/src/Libraries/SharpSvn/Licenses/Putty-License.txt
index c11866445c..a4fb3b138f 100644
--- a/src/Libraries/SharpSvn/Licenses/Putty-License.txt
+++ b/src/Libraries/SharpSvn/Licenses/Putty-License.txt
@@ -1,4 +1,4 @@
-PuTTY is copyright 1997-2011 Simon Tatham.
+PuTTY is copyright 1997-2013 Simon Tatham.
Portions copyright Robert de Bath, Joris van Rantwijk, Delian
Delchev, Andreas Schultz, Jeroen Massar, Wez Furlong, Nicolas Barry,
diff --git a/src/Libraries/SharpSvn/Licenses/SharpSvn-License.txt b/src/Libraries/SharpSvn/Licenses/SharpSvn-License.txt
index 2bdc426a79..14ae3a71b9 100644
--- a/src/Libraries/SharpSvn/Licenses/SharpSvn-License.txt
+++ b/src/Libraries/SharpSvn/Licenses/SharpSvn-License.txt
@@ -1,4 +1,4 @@
- Copyright (c) 2007-2010 The SharpSvn Project
+ Copyright (c) 2007-2012 The SharpSvn Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/src/Libraries/SharpSvn/Licenses/Subversion-License.txt b/src/Libraries/SharpSvn/Licenses/Subversion-License.txt
index d967ea3354..fd5f6ba310 100644
--- a/src/Libraries/SharpSvn/Licenses/Subversion-License.txt
+++ b/src/Libraries/SharpSvn/Licenses/Subversion-License.txt
@@ -260,3 +260,11 @@ subversion/bindings/swig/python/tests/trac/:
IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+For the file subversion/libsvn_subr/utf_width.c
+
+ * Markus Kuhn -- 2007-05-26 (Unicode 5.0)
+ *
+ * Permission to use, copy, modify, and distribute this software
+ * for any purpose and without fee is hereby granted. The author
+ * disclaims all warranties with regard to this software.
diff --git a/src/Libraries/SharpSvn/Licenses/ZLib-License.txt b/src/Libraries/SharpSvn/Licenses/ZLib-License.txt
index d4219bf889..5ca9d127ed 100644
--- a/src/Libraries/SharpSvn/Licenses/ZLib-License.txt
+++ b/src/Libraries/SharpSvn/Licenses/ZLib-License.txt
@@ -1,22 +1,22 @@
ZLIB DATA COMPRESSION LIBRARY
-zlib 1.2.5 is a general purpose data compression library. All the code is
+zlib 1.2.8 is a general purpose data compression library. All the code is
thread safe. The data format used by the zlib library is described by RFCs
(Request for Comments) 1950 to 1952 in the files
-http://www.ietf.org/rfc/rfc1950.txt (zlib format), rfc1951.txt (deflate format)
-and rfc1952.txt (gzip format).
+http://tools.ietf.org/html/rfc1950 (zlib format), rfc1951 (deflate format) and
+rfc1952 (gzip format).
All functions of the compression library are documented in the file zlib.h
(volunteer to write man pages welcome, contact zlib@gzip.org). A usage example
-of the library is given in the file example.c which also tests that the library
-is working correctly. Another example is given in the file minigzip.c. The
-compression library itself is composed of all source files except example.c and
-minigzip.c.
+of the library is given in the file test/example.c which also tests that
+the library is working correctly. Another example is given in the file
+test/minigzip.c. The compression library itself is composed of all source
+files in the root directory.
To compile all files and run the test program, follow the instructions given at
the top of Makefile.in. In short "./configure; make test", and if that goes
-well, "make install" should work for most flavors of Unix. For Windows, use one
-of the special makefiles in win32/ or contrib/vstudio/ . For VMS, use
+well, "make install" should work for most flavors of Unix. For Windows, use
+one of the special makefiles in win32/ or contrib/vstudio/ . For VMS, use
make_vms.com.
Questions about zlib should be sent to , or to Gilles Vollant
@@ -31,7 +31,7 @@ Mark Nelson wrote an article about zlib for the Jan. 1997
issue of Dr. Dobb's Journal; a copy of the article is available at
http://marknelson.us/1997/01/01/zlib-engine/ .
-The changes made in version 1.2.5 are documented in the file ChangeLog.
+The changes made in version 1.2.8 are documented in the file ChangeLog.
Unsupported third party contributions are provided in directory contrib/ .
@@ -44,7 +44,7 @@ http://search.cpan.org/~pmqs/IO-Compress-Zlib/ .
A Python interface to zlib written by A.M. Kuchling is
available in Python 1.5 and later versions, see
-http://www.python.org/doc/lib/module-zlib.html .
+http://docs.python.org/library/zlib.html .
zlib is built into tcl: http://wiki.tcl.tk/4610 .
@@ -84,7 +84,7 @@ Acknowledgments:
Copyright notice:
- (C) 1995-2010 Jean-loup Gailly and Mark Adler
+ (C) 1995-2013 Jean-loup Gailly and Mark Adler
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
diff --git a/src/Libraries/SharpSvn/SharpPlink-Win32.svnExe b/src/Libraries/SharpSvn/SharpPlink-Win32.svnExe
index ebccd6d869..62c9f21bde 100644
Binary files a/src/Libraries/SharpSvn/SharpPlink-Win32.svnExe and b/src/Libraries/SharpSvn/SharpPlink-Win32.svnExe differ
diff --git a/src/Libraries/SharpSvn/SharpSvn-DB44-20-win32.dll b/src/Libraries/SharpSvn/SharpSvn-DB44-20-win32.svnDll
similarity index 97%
rename from src/Libraries/SharpSvn/SharpSvn-DB44-20-win32.dll
rename to src/Libraries/SharpSvn/SharpSvn-DB44-20-win32.svnDll
index a0fb431f11..5a83fbd22b 100644
Binary files a/src/Libraries/SharpSvn/SharpSvn-DB44-20-win32.dll and b/src/Libraries/SharpSvn/SharpSvn-DB44-20-win32.svnDll differ
diff --git a/src/Libraries/SharpSvn/SharpSvn-Sasl21-23-win32.dll b/src/Libraries/SharpSvn/SharpSvn-Sasl21-23-win32.dll
deleted file mode 100644
index 9d4963faaf..0000000000
Binary files a/src/Libraries/SharpSvn/SharpSvn-Sasl21-23-win32.dll and /dev/null differ
diff --git a/src/Libraries/SharpSvn/SharpSvn.UI.dll b/src/Libraries/SharpSvn/SharpSvn.UI.dll
index 71cb60fb37..78e7f100c0 100644
Binary files a/src/Libraries/SharpSvn/SharpSvn.UI.dll and b/src/Libraries/SharpSvn/SharpSvn.UI.dll differ
diff --git a/src/Libraries/SharpSvn/SharpSvn.UI.xml b/src/Libraries/SharpSvn/SharpSvn.UI.xml
index 2a03bf2101..39891c7d82 100644
--- a/src/Libraries/SharpSvn/SharpSvn.UI.xml
+++ b/src/Libraries/SharpSvn/SharpSvn.UI.xml
@@ -310,6 +310,21 @@
resource lookups using this strongly typed resource class.
+
+
+ Looks up a localized resource of type System.Drawing.Bitmap.
+
+
+
+
+ Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
+
+
+
+
+ Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
+
+
Helper methods to bind a user interface to an
diff --git a/src/Libraries/SharpSvn/SharpSvn.dll b/src/Libraries/SharpSvn/SharpSvn.dll
index cdbbc563da..e5139c7b71 100644
Binary files a/src/Libraries/SharpSvn/SharpSvn.dll and b/src/Libraries/SharpSvn/SharpSvn.dll differ
diff --git a/src/Libraries/SharpSvn/SharpSvn.wxs b/src/Libraries/SharpSvn/SharpSvn.wxs
index 98be3c1328..0bce8c4056 100644
--- a/src/Libraries/SharpSvn/SharpSvn.wxs
+++ b/src/Libraries/SharpSvn/SharpSvn.wxs
@@ -1,14 +1,13 @@

-
+
-
-
+
@@ -50,9 +49,6 @@
-
-
-
@@ -61,8 +57,8 @@
-
-
+
+
diff --git a/src/Libraries/SharpSvn/SharpSvn.xml b/src/Libraries/SharpSvn/SharpSvn.xml
index bd64a3284f..4f44695c0b 100644
--- a/src/Libraries/SharpSvn/SharpSvn.xml
+++ b/src/Libraries/SharpSvn/SharpSvn.xml
@@ -99,10 +99,6 @@ latest.
Extended Parameter container of
-
- Extended Parameter container of 's Patch command
-
-
Gets the list of changelist-names to commit
@@ -110,6 +106,94 @@ latest.
Extended Parameter container of
+
+Set the cache configuration. Please note that it may not change
+ the actual configuration *in use*. Therefore, call it before reading
+ data from any repo and call it only once.
+
+ This function is not thread-safe. Therefore, it should be called
+ from the processes' initialization code only.
+
+ @since New in 1.7.
+
+
+
+Get the current cache configuration. If it has not been set,
+ this function will return the default settings.
+
+ @since New in 1.7.
+
+
+
+is this application guaranteed to be single-threaded?
+
+
+maximum number of files kept open
+
+
+total cache size in bytes. Please note that this is only soft limit
+ to the total application memory usage and will be exceeded due to
+ temporary objects and other program state.
+ May be 0, resulting in default caching code being used.
+
+
+ @copyright
+ ====================================================================
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ ====================================================================
+ @endcopyright
+
+ @file svn_cache_config.h
+ @brief Configuration interface to internal Subversion caches.
+
+ @copyright
+ ====================================================================
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ ====================================================================
+ @endcopyright
+
+ @file svn_types.h
+ @brief Subversion's data types
+
+@defgroup svn_fs_cache_config caching configuration
+ * @{
+ * @since New in 1.7.
+Cache resource settings. It controls what caches, in what size and
+ how they will be created. The settings apply for the whole process.
+
+ @since New in 1.7.
+
+
If Force is not set then this operation will fail if any path contains locally modified
and/or unversioned items. If Force is set such items will be deleted.
@@ -136,10 +220,388 @@ and/or unversioned items. If Force is set such items will be deleted.
Extended Parameter container of and
+
+ Gets or sets a boolean indicating whether the paths changed in the revision should be provided
+ Defaults to true
+
+
+ Extended Parameter container of 's ChangeInfo command
+
+
+
+ Only perform a metadata update and leave the working copy as-is
+
+
+ Extended Parameter container of .
+
+
Extended Parameter container of 's Changed method
+
+ Move @a src_abspath to @a dst_abspath, by scheduling @a dst_abspath
+ for addition to the repository, remembering the history. Mark @a src_abspath
+ as deleted after moving.@a wc_ctx is used for accessing the working copy and
+ must contain a write lock for the parent directory of @a src_abspath and
+ @a dst_abspath.
+
+ If @a metadata_only is TRUE then this is a database-only operation and
+ the working directories and files are not changed.
+
+ @a src_abspath must be a file or directory under version control;
+ the parent of @a dst_abspath must be a directory under version control
+ in the same working copy; @a dst_abspath will be the name of the copied
+ item, and it must not exist already if @a metadata_only is FALSE. Note that
+ when @a src points to a versioned file, the working file doesn't
+ necessarily exist in which case its text-base is used instead.
+
+ If @a allow_mixed_revisions is @c FALSE, #SVN_ERR_WC_MIXED_REVISIONS
+ will be raised if the move source is a mixed-revision subtree.
+ If @a allow_mixed_revisions is TRUE, a mixed-revision move source is
+ allowed but the move will degrade to a copy and a delete without local
+ move tracking. This parameter should be set to FALSE except where backwards
+ compatibility to svn_wc_move() is required.
+
+ If @a cancel_func is non-NULL, call it with @a cancel_baton at
+ various points during the operation. If it returns an error
+ (typically #SVN_ERR_CANCELLED), return that error immediately.
+
+ If @a notify_func is non-NULL, call it with @a notify_baton and the path
+ of the root node (only) of the destination.
+
+ Use @a scratch_pool for temporary allocations.
+
+ @since New in 1.8.
+
+
+
+ Assuming @a local_abspath itself or any of its children are under version
+ control or a tree conflict victim and in a state of conflict, take these
+ nodes out of this state.
+
+ If @a resolve_text is TRUE then any text conflict is resolved,
+ if @a resolve_tree is TRUE then any tree conflicts are resolved.
+ If @a resolve_prop is set to "" all property conflicts are resolved,
+ if it is set to any other string value, conflicts on that specific
+ property are resolved and when resolve_prop is NULL, no property
+ conflicts are resolved.
+
+ If @a depth is #svn_depth_empty, act only on @a local_abspath; if
+ #svn_depth_files, resolve @a local_abspath and its conflicted file
+ children (if any); if #svn_depth_immediates, resolve @a local_abspath
+ and all its immediate conflicted children (both files and directories,
+ if any); if #svn_depth_infinity, resolve @a local_abspath and every
+ conflicted file or directory anywhere beneath it.
+
+ If @a conflict_choice is #svn_wc_conflict_choose_base, resolve the
+ conflict with the old file contents; if
+ #svn_wc_conflict_choose_mine_full, use the original working contents;
+ if #svn_wc_conflict_choose_theirs_full, the new contents; and if
+ #svn_wc_conflict_choose_merged, don't change the contents at all,
+ just remove the conflict status, which is the pre-1.5 behavior.
+
+ If @a conflict_choice is #svn_wc_conflict_choose_unspecified, invoke the
+ @a conflict_func with the @a conflict_baton argument to obtain a
+ resolution decision for each conflict.
+
+ #svn_wc_conflict_choose_theirs_conflict and
+ #svn_wc_conflict_choose_mine_conflict are not legal for binary
+ files or properties.
+
+ @a wc_ctx is a working copy context, with a write lock, for @a
+ local_abspath.
+
+ The implementation details are opaque, as our "conflicted" criteria
+ might change over time. (At the moment, this routine removes the
+ three fulltext 'backup' files and any .prej file created in a conflict,
+ and modifies @a local_abspath's entry.)
+
+ If @a local_abspath is not under version control and not a tree
+ conflict, return #SVN_ERR_ENTRY_NOT_FOUND. If @a path isn't in a
+ state of conflict to begin with, do nothing, and return #SVN_NO_ERROR.
+
+ If @c local_abspath was successfully taken out of a state of conflict,
+ report this information to @c notify_func (if non-@c NULL.) If only
+ text, only property, or only tree conflict resolution was requested,
+ and it was successful, then success gets reported.
+
+ Temporary allocations will be performed in @a scratch_pool.
+
+ @since New in 1.8.
+
+
+
+Obtains a diff processor that will drive the diff callbacks when it
+ * is invoked.
+
+
+
+Callback for the svn_diff_tree_processor_t wrapper, to allow handling
+ * absent nodes.
+ *
+ * Probably only necessary while transitioning to svn_diff_tree_processor_t
+
+
+
+Callback for the svn_diff_tree_processor_t wrapper, to allow handling
+ * notifications like how the repos diff in libsvn_client does.
+ *
+ * Probably only necessary while transitioning to svn_diff_tree_processor_t
+
+
+
+Callback for the svn_diff_tree_processor_t wrapper, to allow handling
+ * notifications like how the repos diff in libsvn_client does.
+ *
+ * Probably only necessary while transitioning to svn_diff_tree_processor_t
+
+
+
+ Return an @a editor/@a edit_baton for diffing a working copy against the
+ repository. The editor is allocated in @a result_pool; temporary
+ calculations are performed in @a scratch_pool.
+
+ This editor supports diffing either the actual files and properties in the
+ working copy (when @a use_text_base is #FALSE), or the current pristine
+ information (when @a use_text_base is #TRUE) against the editor driver.
+
+ @a anchor_abspath/@a target represent the base of the hierarchy to be
+ compared. The diff callback paths will be relative to this path.
+
+ Diffs will be reported as valid relpaths, with @a anchor_abspath being
+ the root ("").
+
+ @a callbacks/@a callback_baton is the callback table to use.
+
+ If @a depth is #svn_depth_empty, just diff exactly @a target or
+ @a anchor_path if @a target is empty. If #svn_depth_files then do the same
+ and for top-level file entries as well (if any). If
+ #svn_depth_immediates, do the same as #svn_depth_files but also diff
+ top-level subdirectories at #svn_depth_empty. If #svn_depth_infinity,
+ then diff fully recursively. If @a depth is #svn_depth_unknown, then...
+
+ ### ... then the @a server_performs_filtering option is meaningful.
+ ### But what does this depth mean exactly? Something about 'ambient'
+ ### depth? How does it compare with depth 'infinity'?
+
+ @a ignore_ancestry determines whether paths that have discontinuous node
+ ancestry are treated as delete/add or as simple modifications. If
+ @a ignore_ancestry is @c FALSE, then any discontinuous node ancestry will
+ result in the diff given as a full delete followed by an add.
+
+ @a show_copies_as_adds determines whether paths added with history will
+ appear as a diff against their copy source, or whether such paths will
+ appear as if they were newly added in their entirety.
+
+ If @a use_git_diff_format is TRUE, copied paths will be treated as added
+ if they weren't modified after being copied. This allows the callbacks
+ to generate appropriate --git diff headers for such files.
+
+ Normally, the difference from repository->working_copy is shown.
+ If @a reverse_order is TRUE, then show working_copy->repository diffs.
+
+ If @a cancel_func is non-NULL, it will be used along with @a cancel_baton
+ to periodically check if the client has canceled the operation.
+
+ @a changelist_filter is an array of const char * changelist
+ names, used as a restrictive filter on items whose differences are
+ reported; that is, don't generate diffs about any item unless
+ it's a member of one of those changelists. If @a changelist_filter is
+ empty (or altogether @c NULL), no changelist filtering occurs.
+
+ If @a server_performs_filtering is TRUE, assume that the server handles
+ the ambient depth filtering, so this doesn't have to be handled in the
+ editor.
+
+
+ A diagram illustrating how this function is used.
+
+ Steps 1 and 2 create the chain; step 3 drives it.
+
+ 1. svn_wc__get_diff_editor(diff_cbs)
+ | ^
+ 2. svn_ra_do_diff3(editor) | |
+ | ^ | |
+ v | v |
+ +----------+ +----------+ +----------+
+ | | | | | |
+ +--> | reporter | ----> | editor | ----> | diff_cbs | ----> text
+ | | | | | | | out
+ | +----------+ +----------+ +----------+
+ |
+ 3. svn_wc_crawl_revisions5(WC,reporter)
+
+
+ @since New in 1.8.
+
+
+
+ A variant of svn_wc__get_update_editor().
+
+ Set @a *editor and @a *edit_baton to an editor and baton for "switching"
+ a working copy to a new @a switch_url. (Right now, this URL must be
+ within the same repository that the working copy already comes
+ from.) @a switch_url must not be @c NULL.
+
+ All other parameters behave as for svn_wc__get_update_editor().
+
+ @since New in 1.8.
+
+
+
+ Set @a *editor and @a *edit_baton to an editor and baton for updating a
+ working copy.
+
+ @a anchor_abspath is a local working copy directory, with a fully recursive
+ write lock in @a wc_ctx, which will be used as the root of our editor.
+
+ @a target_basename is the entry in @a anchor_abspath that will actually be
+ updated, or the empty string if all of @a anchor_abspath should be updated.
+
+ The editor invokes @a notify_func with @a notify_baton as the update
+ progresses, if @a notify_func is non-NULL.
+
+ If @a cancel_func is non-NULL, the editor will invoke @a cancel_func with
+ @a cancel_baton as the update progresses to see if it should continue.
+
+ If @a conflict_func is non-NULL, then invoke it with @a
+ conflict_baton whenever a conflict is encountered, giving the
+ callback a chance to resolve the conflict before the editor takes
+ more drastic measures (such as marking a file conflicted, or
+ bailing out of the update).
+
+ If @a external_func is non-NULL, then invoke it with @a external_baton
+ whenever external changes are encountered, giving the callback a chance
+ to store the external information for processing.
+
+ If @a diff3_cmd is non-NULL, then use it as the diff3 command for
+ any merging; otherwise, use the built-in merge code.
+
+ @a preserved_exts is an array of filename patterns which, when
+ matched against the extensions of versioned files, determine for
+ which such files any related generated conflict files will preserve
+ the original file's extension as their own. If a file's extension
+ does not match any of the patterns in @a preserved_exts (which is
+ certainly the case if @a preserved_exts is @c NULL or empty),
+ generated conflict files will carry Subversion's custom extensions.
+
+ @a target_revision is a pointer to a revision location which, after
+ successful completion of the drive of this editor, will be
+ populated with the revision to which the working copy was updated.
+
+ @a wcroot_iprops is a hash mapping const char * absolute working copy
+ paths which are working copy roots (at or under the target within the
+ constraints dictated by @a depth) to depth-first ordered arrays of
+ svn_prop_inherited_item_t * structures which represent the inherited
+ properties for the base of those paths at @a target_revision. After a
+ successful drive of this editor, the base nodes for these paths will
+ have their inherited properties cache updated with the values from
+ @a wcroot_iprops.
+
+ If @a use_commit_times is TRUE, then all edited/added files will
+ have their working timestamp set to the last-committed-time. If
+ FALSE, the working files will be touched with the 'now' time.
+
+ If @a allow_unver_obstructions is TRUE, then allow unversioned
+ obstructions when adding a path.
+
+ If @a adds_as_modification is TRUE, a local addition at the same path
+ as an incoming addition of the same node kind results in a normal node
+ with a possible local modification, instead of a tree conflict.
+
+ If @a depth is #svn_depth_infinity, update fully recursively.
+ Else if it is #svn_depth_immediates, update the uppermost
+ directory, its file entries, and the presence or absence of
+ subdirectories (but do not descend into the subdirectories).
+ Else if it is #svn_depth_files, update the uppermost directory
+ and its immediate file entries, but not subdirectories.
+ Else if it is #svn_depth_empty, update exactly the uppermost
+ target, and don't touch its entries.
+
+ If @a depth_is_sticky is set and @a depth is not
+ #svn_depth_unknown, then in addition to updating PATHS, also set
+ their sticky ambient depth value to @a depth.
+
+ If @a server_performs_filtering is TRUE, assume that the server handles
+ the ambient depth filtering, so this doesn't have to be handled in the
+ editor.
+
+ If @a clean_checkout is TRUE, assume that we are checking out into an
+ empty directory, and so bypass a number of conflict checks that are
+ unnecessary in this case.
+
+ If @a fetch_dirents_func is not NULL, the update editor may call this
+ callback, when asked to perform a depth restricted update. It will do this
+ before returning the editor to allow using the primary ra session for this.
+
+ @since New in 1.8.
+
+
+
+ Set @a *editor and @a *edit_baton to an editor that generates
+ #svn_wc_status3_t structures and sends them through @a status_func /
+ @a status_baton. @a anchor_abspath is a working copy directory
+ directory which will be used as the root of our editor. If @a
+ target_basename is not "", it represents a node in the @a anchor_abspath
+ which is the subject of the editor drive (otherwise, the @a
+ anchor_abspath is the subject).
+
+ If @a set_locks_baton is non-@c NULL, it will be set to a baton that can
+ be used in a call to the svn_wc_status_set_repos_locks() function.
+
+ Callers drive this editor to describe working copy out-of-dateness
+ with respect to the repository. If this information is not
+ available or not desired, callers should simply call the
+ close_edit() function of the @a editor vtable.
+
+ If the editor driver calls @a editor's set_target_revision() vtable
+ function, then when the edit drive is completed, @a *edit_revision
+ will contain the revision delivered via that interface.
+
+ Assuming the target is a directory, then:
+
+ - If @a get_all is FALSE, then only locally-modified entries will be
+ returned. If TRUE, then all entries will be returned.
+
+ - If @a depth is #svn_depth_empty, a status structure will
+ be returned for the target only; if #svn_depth_files, for the
+ target and its immediate file children; if
+ #svn_depth_immediates, for the target and its immediate
+ children; if #svn_depth_infinity, for the target and
+ everything underneath it, fully recursively.
+
+ If @a depth is #svn_depth_unknown, take depths from the
+ working copy and behave as above in each directory's case.
+
+ If the given @a depth is incompatible with the depth found in a
+ working copy directory, the found depth always governs.
+
+ If @a no_ignore is set, statuses that would typically be ignored
+ will instead be reported.
+
+ @a ignore_patterns is an array of file patterns matching
+ unversioned files to ignore for the purposes of status reporting,
+ or @c NULL if the default set of ignorable file patterns should be used.
+
+ If @a cancel_func is non-NULL, call it with @a cancel_baton while building
+ the @a statushash to determine if the client has canceled the operation.
+
+ If @a depth_as_sticky is set handle @a depth like when depth_is_sticky is
+ passed for updating. This will show excluded nodes show up as added in the
+ repository.
+
+ If @a server_performs_filtering is TRUE, assume that the server handles
+ the ambient depth filtering, so this doesn't have to be handled in the
+ editor.
+
+ Allocate the editor itself in @a result_pool, and use @a scratch_pool
+ for temporary allocations. The editor will do its temporary allocations
+ in a subpool of @a result_pool.
+
+ @since New in 1.8.
+
+
The callback invoked by info retrievers. Each invocation
* describes @a local_abspath with the information present in @a info.
@@ -210,7 +672,43 @@ rooted at @a local_abspath.
For use by entries.c and entries-dump.c to read old-format working copies.
-
+
+ Set @a *iprops_paths to a hash mapping const char * absolute working
+ copy paths to the nodes repository root relative path for each path
+ in the working copy at or below @a local_abspath, limited by @a depth,
+ that has cached inherited properties for the base node of the path.
+
+ Allocate @a *iprop_paths
+ in @a result_pool. Use @a scratch_pool for temporary allocations.
+
+
+
+Obtain a mapping of const char * local_abspaths to const svn_string_t*
+ * property values in *VALUES, of all PROPNAME properties on LOCAL_ABSPATH
+ * and its descendants.
+ *
+ * Allocate the result in RESULT_POOL, and perform temporary allocations in
+ * SCRATCH_POOL.
+
+
+
+ Set @a *inherited_props to a depth-first ordered array of
+ #svn_prop_inherited_item_t * structures representing the properties
+ inherited by @a local_abspath from the ACTUAL tree above
+ @a local_abspath (looking through to the WORKING or BASE tree as
+ required), up to and including the root of the working copy and
+ any cached inherited properties inherited by the root.
+
+ The #svn_prop_inherited_item_t->path_or_url members of the
+ #svn_prop_inherited_item_t * structures in @a *inherited_props are
+ paths relative to the repository root URL for cached inherited
+ properties and absolute working copy paths otherwise.
+
+ Allocate @a *inherited_props in @a result_pool. Use @a scratch_pool
+ for temporary allocations.
+
+
+
Call @a receiver_func, passing @a receiver_baton, an absolute path, and
* a hash table mapping const char * names onto const
* svn_string_t * values for all the regular properties of the node
@@ -220,10 +718,6 @@ Call @a receiver_func, passing @a receiver_baton, an absolute path, and
* If @a propname is not NULL, the passed hash table will only contain
* the property @a propname.
*
- * If @a base_props is @c TRUE, get the unmodified BASE properties
- * from the working copy, instead of getting the current (or "WORKING")
- * properties.
- *
* If @a pristine is not @c TRUE, and @a base_props is FALSE show local
* modifications to the properties.
*
@@ -249,6 +743,20 @@ A callback invoked by svn_wc__prop_list_recursive().
* @since New in 1.7.
+Evaluate the expression @a expr while holding a write lock on
+ * @a local_abspath.
+ *
+ * @a expr must yield an (svn_error_t *) error code. If the error code
+ * is not #SVN_NO_ERROR, cause the function using this macro to return
+ * the error to its caller.
+ *
+ * If @a lock_anchor is TRUE, determine if @a local_abspath has an anchor
+ * that should be locked instead.
+ *
+ * Use @a wc_ctx for working copy access.
+ *
+ * The lock is guaranteed to be released after evaluating @a expr.
+
Calculates the schedule and copied status of a node as that would
have been stored in an svn_wc_entry_t instance.
@@ -297,67 +805,23 @@ A callback invoked by the svn_wc__call_with_write_lock() function.
lock_root_abspath will be set even when SVN_ERR_WC_LOCKED is returned.
-
- A hack to remove the last entry from libsvn_client. This simply fetches an
- some values from WC-NG, and puts the needed bits into the output parameters,
- allocated in @a result_pool.
-
- All output arguments can be NULL to indicate that the
- caller is not interested in the specific result.
-
- @a local_abspath and @a wc_ctx are what you think they are.
-
-
-
- Fetch lock information (if any) for @a local_abspath using @a wc_ctx:
-
- Set @a *lock_token to the lock token (or NULL)
- Set @a *lock_owner to the owner of the lock (or NULL)
- Set @a *lock_comment to the comment associated with the lock (or NULL)
- Set @a *lock_date to the timestamp of the lock (or 0)
+
+ Get the repository location of the base node at @a local_abspath.
- Any of the aforementioned return values may be NULL to indicate
- that the caller doesn't care about those values.
+ Set *REVISION, *REPOS_RELPATH, *REPOS_ROOT_URL *REPOS_UUID and *LOCK_TOKEN
+ to the location that this node was checked out at or last updated/switched
+ to, regardless of any uncommitted changes (delete, replace and/or copy-here/
+ move-here).
- If @a local_abspath is not in the working copy, return @c
- SVN_ERR_WC_PATH_NOT_FOUND.
-
-
-
-This whole function is for legacy, and it sucks. It does not really
- * make sense to get the copy-from revision number without the copy-from
- * URL, but higher level code currently wants that. This should go away.
- * (This function serves to get away from entry_t->revision without having to
- * change the public API.)
- *
- * Get the base revision of @a local_abspath using @a wc_ctx. If @a
- * local_abspath is not in the working copy, return @c
- * SVN_ERR_WC_PATH_NOT_FOUND.
- *
- * Return the revision number of the base for this node's next commit,
- * reflecting any local tree modifications affecting this node.
- *
- * If this node has no uncommitted changes, return the same as
- * svn_wc__node_get_base_rev().
- *
- * If this node is moved-here or copied-here (possibly as part of a replace),
- * return the revision of the copy/move source. Do the same even when the node
- * has been removed from a recursive copy (subpath excluded from the copy).
- *
- * Else, if this node is locally added, return SVN_INVALID_REVNUM, or if this
- * node is locally deleted or replaced, return the revert-base revision.
+ If there is no BASE node at @a local_abspath or if @a show_hidden is FALSE,
+ no status 'normal' or 'incomplete' BASE node report
+ SVN_ERR_WC_PATH_NOT_FOUND, or if @a ignore_enoent is TRUE, @a kind
+ svn_node_unknown, @a revision SVN_INVALID_REVNUM and all other values NULL.
-
-
- Get the base revision of @a local_abspath using @a wc_ctx. If
- @a local_abspath is not in the working copy, return
- @c SVN_ERR_WC_PATH_NOT_FOUND.
+ All output arguments may be NULL.
- In @a *base_revision, return the revision of the revert-base, i.e. the
- revision that this node was checked out at or last updated/switched to,
- regardless of any uncommitted changes (delete, replace and/or
- copy-here/move-here). For a locally added/copied/moved-here node that is
- not part of a replace, return @c SVN_INVALID_REVNUM.
+ Allocate the results in @a result_pool. Perform temporary allocations in
+ @a scratch_pool.
@@ -380,27 +844,34 @@ This whole function is for legacy, and it sucks. It does not really
To be clear, this does NOT correspond to svn_wc_schedule_add.
-
-Set @a *is_excluded to whether the status of @a local_abspath is
-#svn_wc__db_status_excluded, using @a wc_ctx.
-If @a local_abspath is not in the working copy, return
-@c SVN_ERR_WC_PATH_NOT_FOUND. Use @a scratch_pool for all temporary
-allocations.
+
+ Set @a *not_present to TRUE when @a local_abspath has status
+ svn_wc__db_status_not_present. Set @a *user_excluded to TRUE when
+ @a local_abspath has status svn_wc__db_status_excluded. Set
+ @a *server_excluded to TRUE when @a local_abspath has status
+ svn_wc__db_status_server_excluded. Otherwise set these values to FALSE.
+ If @a base_only is TRUE then only the base node will be examined,
+ otherwise the current base or working node will be examined.
-
-
-Set @a *is_not_present to whether the status of @a local_abspath is
-#svn_wc__db_status_not_present, using @a wc_ctx.
-If @a local_abspath is not in the working copy, return
-@c SVN_ERR_WC_PATH_NOT_FOUND. Use @a scratch_pool for all temporary
-allocations.
+ If a value is not interesting you can pass #NULL.
+
+ If @a local_abspath is not in the working copy, return
+ @c SVN_ERR_WC_PATH_NOT_FOUND. Use @a scratch_pool for all temporary
+ allocations.
-
-Set @a *is_server_excluded to whether @a local_abspath has been
-excluded by the server, using @a wc_ctx. If @a local_abspath is not
-in the working copy, return @c SVN_ERR_WC_PATH_NOT_FOUND.
-Use @a scratch_pool for all temporary allocations.
+
+ Set @a *deleted_ancestor_abspath to the root of the delete operation
+ that deleted @a local_abspath. If @a local_abspath itself was deleted
+ and has no deleted ancestor, @a *deleted_ancestor_abspath will equal
+ @a local_abspath. If @a local_abspath was not deleted,
+ set @a *deleted_ancestor_abspath to @c NULL.
+
+ A node is considered 'deleted' if it is deleted or moved-away, and is
+ not replaced.
+
+ @a *deleted_ancestor_abspath is allocated in @a result_pool.
+ Use @a scratch_pool for all temporary allocations.
@@ -410,19 +881,11 @@ Set @a *is_deleted to TRUE if @a local_abspath is deleted, using
allocations.
-
- Set @a *repos_relpath to the corresponding repos_relpath for @a
- local_abspath, using @a wc_ctx. If the node is added, return the
- repos_relpath it will have in the repository.
-
- If @a local_abspath is not in the working copy, return @c
- SVN_ERR_WC_PATH_NOT_FOUND.
-
-
-
+
Retrieves the origin of the node as it is known in the repository. For
- added nodes this retrieves where the node is copied from, and the repository
- location for other nodes.
+ a copied node this retrieves where the node is copied from, for an added
+ node this returns NULL/INVALID outputs, and for any other node this
+ retrieves the repository location.
All output arguments may be NULL.
@@ -432,6 +895,12 @@ allocations.
If not NULL, sets @a revision, @a repos_relpath, @a repos_root_url and
@a repos_uuid to the original (if a copy) or their current values.
+ If @a copy_root_abspath is not NULL, and @a *is_copy indicates that the
+ node was copied, set @a *copy_root_abspath to the local absolute path of
+ the root of the copied subtree containing the node. If the copied node is
+ a root by itself, @a *copy_root_abspath will match @a local_abspath (but
+ won't necessarily point to the same string in memory).
+
If @a scan_deleted is TRUE, determine the origin of the deleted node. If
@a scan_deleted is FALSE, return NULL, SVN_INVALID_REVNUM or FALSE for
deleted nodes.
@@ -462,21 +931,24 @@ Get the depth of @a local_abspath using @a wc_ctx. If @a local_abspath is
not in the working copy, return @c SVN_ERR_WC_PATH_NOT_FOUND.
-
- Fetch the repository root information for a given @a local_abspath into
- @a *repos_root_url and @a repos_uuid. Use @a wc_ctx to access the working copy
- for @a local_abspath, @a scratch_pool for all temporary allocations,
- @a result_pool for result allocations. Note: the result may be NULL if the
- given node has no repository root associated with it (e.g. locally added).
+
+ Fetch the repository information for the working version
+ of the node at @a local_abspath into @a *revision, @a *repos_relpath,
+ @a *repos_root_url and @a *repos_uuid. Use @a wc_ctx to access the working
+ copy. Allocate results in @a result_pool.
+
+ @a *revision will be set to SVN_INVALID_REVNUM for any shadowed node (including
+ added and deleted nodes). All other output values will be set to the current
+ values or those they would have after a commit.
- Either input value may be NULL, indicating no interest.
+ All output argument may be NULL, indicating no interest.
-Like svn_wc__node_get_children2(), except also include any path that was
-a child of a deleted directory that existed at @a dir_abspath, even if
-that directory is now scheduled to be replaced by the working node at
-@a dir_abspath.
+Like svn_wc__node_get_children_of_working_node(), except also include any
+path that was a child of a deleted directory that existed at
+@a dir_abspath, even if that directory is now scheduled to be replaced by
+the working node at @a dir_abspath.
@@ -503,13 +975,17 @@ wc-ng. Use them for new development now, but they may be disappearing
before the 1.7 release.
-
+
Set @a *wcroot_abspath to the local abspath of the root of the
* working copy in which @a local_abspath resides.
-
-Like svn_wc_is_wc_root(), but it doesn't consider switched subdirs or
+
+Check whether LOCAL_ABSPATH has a parent directory that knows about its
+ * existence. Set *IS_WCROOT to FALSE if a parent is found, and to TRUE
+ * if there is no such parent.
+ *
+ * Like svn_wc_is_wc_root2(), but doesn't consider switched subdirs or
* deleted entries as working copy roots.
@@ -517,6 +993,12 @@ Like svn_wc_is_wc_root(), but it doesn't consider switched subdirs or
Record the tree conflict described by @a conflict in the WC for
* @a conflict->local_abspath. Use @a scratch_pool for all temporary
* allocations.
+ *
+ * Returns an SVN_ERR_WC_PATH_UNEXPECTED_STATUS error when
+ * CONFLICT->LOCAL_ABSPATH is already tree conflicted.
+ *
+ * ### This function can't set moved_away, moved_here conflicts for
+ * any operation, except merges.
@@ -528,132 +1010,8 @@ Set @a *tree_conflict to a newly allocated @c
* use @a scratch_pool for temporary allocations.
-
- @copyright
- ====================================================================
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
- ====================================================================
- @endcopyright
-
- @file svn_wc_private.h
- @brief The Subversion Working Copy Library - Internal routines
-
- Requires:
- - A working copy
-
- Provides:
- - Ability to manipulate working copy's versioned data.
- - Ability to manipulate working copy's administrative files.
-
- Used By:
- - Clients.
-
- @copyright
- ====================================================================
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
- ====================================================================
- @endcopyright
-
- @file svn_types.h
- @brief Subversion's data types
-
- @copyright
- ====================================================================
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
- ====================================================================
- @endcopyright
-
- @file svn_wc.h
- @brief Subversion's working copy library
-
- Requires:
- - A working copy
-
- Provides:
- - Ability to manipulate working copy's versioned data.
- - Ability to manipulate working copy's administrative files.
-
- Used By:
- - Clients.
-
- Notes:
- The 'path' parameters to most of the older functions can be
- absolute or relative (relative to current working
- directory). If there are any cases where they are
- relative to the path associated with the
- 'svn_wc_adm_access_t *adm_access' baton passed along with the
- path, those cases should be explicitly documented, and if they
- are not, please fix it. All new functions introduced since
- Subversion 1.7 require absolute paths, unless explicitly
- documented otherwise.
-
- Starting with Subversion 1.7, several arguments are re-ordered
- to be more consistent through the api. The common ordering used
- is:
-
- Firsts:
- - Output arguments
- Then:
- - Working copy context
- - Local abspath
- Followed by:
- - Function specific arguments
- - Specific callbacks with their batons
- Finally:
- - Generic callbacks (with baton) from directly functional to
- just observing:
- - svn_wc_conflict_resolver_func2_t
- - svn_wc_external_update_t
- - svn_cancel_func_t
- - svn_wc_notify_func2_t
- - Result pool
- - Scratch pool.
-
+
+See svn_wc__committable_externals_below().
If this value is TRUE and RetrieveRemoteStatus it TRUE, shows what an update with KeepDepth TRUE would do. (Shows excluded nodes as additions)
@@ -707,6 +1065,9 @@ out of date
Extended Parameter container of and
+
+ True to filter this node, false to allow importing it
+
Looks up a localized string similar to The value {0} is not a valid {1}.
@@ -815,6 +1176,11 @@ out of date
Looks up a localized string similar to '{0}' locked by user '{1}'..
+
+
+
+
+ Looks up a localized string similar to Updating '{0}':.
@@ -837,14 +1203,29 @@ out of date
Looks up a localized string similar to Status against revision: {0}.
-
+
+
+ Looks up a localized string similar to Skipped '{0}' - Node remains in conflict.
+
+
+
- Looks up a localized string similar to Skipped missing '{0}'.
+ Looks up a localized string similar to Skipped '{0}'.
+
+
+
+
+ Looks up a localized string similar to Skipped '{0}' - An obstructing working copy found.
Looks up a localized string similar to Skipped missing target '{0}'.
+
+
+
+
+ Looks up a localized string similar to Skipped '{0}' - Access denied.
@@ -910,6 +1291,11 @@ out of date
Looks up a localized string similar to Failed to revert '{0}' -- try updating instead.
+
+
+
+
+ Looks up a localized string similar to Removed external '{0}'.
@@ -1048,6 +1434,182 @@ out of date
A strongly-typed resource class, for looking up localized strings, etc.
+
+Enable or disable SSL compression on a SSL session.
+@a enabled = 1 to enable compression, 0 to disable compression.
+Default = disabled.
+
+
+
+Adds the certificate @a cert to the list of trusted certificates in
+@a ssl_ctx that will be used for verification.
+See also @a serf_ssl_load_cert_file.
+
+
+
+Load a CA certificate file from a path @a file_path. If the file was loaded
+and parsed correctly, a certificate @a cert will be created and returned.
+This certificate object will be alloced in @a pool.
+
+
+
+Export a certificate to base64-encoded, zero-terminated string.
+The returned string is allocated in @a pool. Returns NULL on failure.
+
+
+
+Extract the fields of the certificate in a table with keys (sha1, notBefore,
+notAfter, subjectAltName). The returned table will be allocated in @a pool.
+
+
+
+Extract the fields of the subject in a table with keys (E, CN, OU, O, L,
+ST and C). The returned table will be allocated in @a pool.
+
+
+
+Extract the fields of the issuer in a table with keys (E, CN, OU, O, L,
+ST and C). The returned table will be allocated in @a pool.
+
+
+
+Return the depth of the certificate.
+
+
+
+Allow SNI indicators to be sent to the server.
+
+
+
+Use the default root CA certificates as included with the OpenSSL library.
+
+
+
+Set callbacks to override the default SSL server certificate validation
+algorithm for the current certificate or the entire certificate chain.
+
+
+
+Set a callback to override the default SSL server certificate validation
+algorithm.
+
+
+
+ Iterates over all headers of the message and invokes the callback
+ function with header key and value. Stop iterating when no more
+ headers are available or when the callback function returned a
+ non-0 value.
+
+ @param headers_bucket headers to iterate over
+ @param func callback routine to invoke for every header in the bucket
+ @param baton baton to pass on each invocation to func
+
+
+
+@param baton opaque baton as passed to @see serf_bucket_headers_do
+@param key The header key from this iteration through the table
+@param value The header value from this iteration through the table
+
+
+
+ Set, extended: fine grained copy control of header and value.
+
+ Set the specified @a header, with length @a header_size with the
+ @a value, and length @a value_size, into the bucket. The header will
+ be copied if @a header_copy is set, and the value is copied if
+ @a value_copy is set. If the values are not copied, then they should
+ remain in scope at least as long as the bucket.
+
+ If @a headers_bucket already contains a header with the same name
+ as @a header, then append @a value to the existing value,
+ separating with a comma (as per RFC 2616, section 4.2). In this
+ case, the new value must be allocated and the header re-used, so
+ behave as if @a value_copy were true and @a header_copy false.
+
+
+
+ Set, no copies.
+
+ Set the specified @a header and @a value into the bucket, without
+ copying either attribute. Both attributes should remain in scope at
+ least as long as the bucket.
+
+ @note In the case where a header already exists this will result
+ in a reallocation and copy, @see serf_bucket_headers_setn.
+
+
+
+ Set, copies: header and value copied.
+
+ Copy the specified @a header and @a value into the bucket, using space
+ from this bucket's allocator.
+
+
+
+ Set, default: value copied.
+
+ Set the specified @a header within the bucket, copying the @a value
+ into space from this bucket's allocator. The header is NOT copied,
+ so it should remain in scope at least as long as the bucket.
+
+
+
+Equivalent to serf_bucket_simple_create, except that the bucket assumes
+responsibility for freeing the data on this allocator without making
+a copy. It is assumed that data was created by a call from allocator.
+
+
+
+Equivalent to serf_bucket_simple_create, except that the bucket takes
+ownership of a private copy of the data.
+
+
+
+Transform @a bucket in-place into an aggregate bucket.
+
+
+serf_bucket_aggregate_cleanup will instantly destroy all buckets in
+ the aggregate bucket that have been read completely. Whereas normally,
+ these buckets are destroyed on every read operation.
+
+
+Advise the response @a bucket that this was from a HEAD request and
+that it should not expect to see a response body.
+
+
+
+Get the headers bucket for @a response.
+
+
+
+ Wait for the HTTP headers to be processed for a @a response.
+
+ If the headers are available, APR_SUCCESS is returned.
+ If the headers aren't available, APR_EAGAIN is returned.
+
+
+
+Return the Status-Line information, if available. This function
+works like other bucket read functions: it may return APR_EAGAIN or
+APR_EOF to signal the state of the bucket for reading. A return
+value of APR_SUCCESS will always indicate that status line
+information was returned; for other return values the caller must
+check the version field in @a sline. A value of 0 means that the
+data is not (yet) present.
+
+
+
+Sets the root url of the remote host. If this request contains a relative
+url, it will be prefixed with the root url to form an absolute url.
+@a bucket is the request bucket. @a root_url is the absolute url of the
+root of the remote host, without the closing '/'.
+
+
+
+@file serf_bucket_types.h
+@brief serf-supported bucket types
+
+
@copyright
====================================================================
@@ -1097,6 +1659,74 @@ out of date
@file svn_mergeinfo.h
@brief mergeinfo handling and processing
+
+
+ Perform backend-specific data consistency and correctness validations
+ of @a root in the Subversion filesystem @a fs. @a root is typically
+ a revision root (see svn_fs_revision_root()), but may be a
+ transaction root. Use @a scratch_pool for temporary allocations.
+
+ @note You probably don't want to use this directly. Take a look at
+ svn_repos_verify_fs2() instead, which does non-backend-specific
+ verifications as well.
+
+ @note To ensure a full verification using all available tests and
+ covering all revisions, you must call both this function and
+ #svn_fs_verify.
+
+ @note Implementors, please perform tests that cannot be done
+ efficiently for a single revision in #svn_fs_verify. This function
+ is intended for local checks that don't require an expensive context
+ setup.
+
+ @see svn_repos_verify_fs2()
+ @see svn_fs_verify()
+
+ @since New in 1.8.
+
+
+
+ Perform backend-specific data consistency and correctness validations
+ to the Subversion filesystem (mainly the meta-data) located in the
+ directory @a path. Use the backend-specific configuration @a fs_config
+ when opening the filesystem. @a NULL is valid for all backends.
+ Use @a scratch_pool for temporary allocations.
+
+ @a start and @a end define the (minimum) range of revisions to check.
+ If @a start is #SVN_INVALID_REVNUM, it defaults to @c r0. Likewise,
+ @a end will default to the current youngest repository revision when
+ given as #SVN_INVALID_REVNUM. Since meta data checks may have to touch
+ other revisions as well, you may receive notifications for revisions
+ outside the specified range. In fact, it is perfectly legal for a FS
+ implementation to always check all revisions.
+
+ Global invariants are only guaranteed to get verified when @a r0 has
+ been included in the range of revisions to check.
+
+ The optional @a notify_func callback is only a general feedback that
+ the operation is still in process but may be called in random revisions
+ order and more than once for the same revision, i.e. r2, r1, r2 would
+ be a valid sequence.
+
+ The optional @a cancel_func callback will be invoked as usual to allow
+ the user to preempt this potentially lengthy operation.
+
+ @note You probably don't want to use this directly. Take a look at
+ svn_repos_verify_fs2() instead, which does non-backend-specific
+ verifications as well.
+
+ @note To ensure a full verification using all tests and covering all
+ revisions, you must call this function *and* #svn_fs_verify_root.
+
+ @note Implementors, please do tests that can be done efficiently for
+ a single revision in #svn_fs_verify_root. This function is meant for
+ global checks or tests that require an expensive context setup.
+
+ @see svn_repos_verify_fs2()
+ @see svn_fs_verify_root()
+
+ @since New in 1.8.
+
Possibly update the filesystem located in the directory @a path
@@ -1132,7 +1762,8 @@ packing of the shard has commenced
@}
Append a textual list of all available FS modules to the stringbuf
- @a output.
+ @a output. Third-party modules are only included if repository
+ access has caused them to be loaded.
@since New in 1.2.
@@ -1444,6 +2075,33 @@ Create a new file named @a path in @a root. The file's initial contents
*
* Do any necessary temporary allocation in @a pool.
+
+
+Efficiently deliver the contents of the file @a path in @a root
+ * via @a processor (with @a baton), setting @a *success to @c TRUE
+ * upon doing so. Use @a pool for allocations.
+ *
+ * This function is intended to support zero copy data processing. It may
+ * not be implemented for all data backends or not applicable for certain
+ * content. In that case, @a *success will always be @c FALSE. Also, this
+ * is a best-effort function which means that there is no guarantee that
+ * @a processor gets called at all for some content.
+ *
+ * @note @a processor is expected to be relatively short function with
+ * at most O(content size) runtime.
+ *
+ * @since New in 1.8.
+
+
+
+ Callback function type used with svn_fs_try_process_file_contents()
+ that delivers the immutable, non-NULL @a contents of @a len bytes.
+ @a baton is an implementation-specific closure.
+
+ Use @a scratch_pool for allocations.
+
+ @since New in 1.8.
+
Set @a *contents to a readable generic stream that will yield the
@@ -1615,6 +2273,13 @@ Merge changes between two nodes into a third node.
+ Same as svn_fs_get_mergeinfo2(), but with @a adjust_inherited_mergeinfo
+ set always set to @c TRUE and with only one pool.
+
+ @deprecated Provided for backward compatibility with the 1.5 API.
+
+
+
Retrieve mergeinfo for multiple nodes.
*
* @a *catalog is a catalog for @a paths. It will never be @c NULL,
@@ -1627,6 +2292,15 @@ Retrieve mergeinfo for multiple nodes.
* @a inherit indicates whether to retrieve explicit,
* explicit-or-inherited, or only inherited mergeinfo.
*
+ * If @a adjust_inherited_mergeinfo is @c TRUE, then any inherited
+ * mergeinfo returned in @a *catalog is normalized to represent the
+ * inherited mergeinfo on the path which inherits it. If
+ * @a adjust_inherited_mergeinfo is @c FALSE, then any inherited
+ * mergeinfo is the raw explicit mergeinfo from the nearest parent
+ * of the path with explicit mergeinfo, unadjusted for the path-wise
+ * difference between the path and its parent. This may include
+ * non-inheritable mergeinfo.
+ *
* If @a include_descendants is TRUE, then additionally return the
* mergeinfo for any descendant of any element of @a paths which has
* the #SVN_PROP_MERGEINFO property explicitly set on it. (Note
@@ -1634,16 +2308,16 @@ Retrieve mergeinfo for multiple nodes.
* paths; descendants of the elements in @a paths which get their
* mergeinfo via inheritance are not included in @a *catalog.)
*
- * Do any necessary temporary allocation in @a pool.
+ * Allocate @a *catalog in result_pool. Do any necessary temporary
+ * allocations in @a scratch_pool.
*
- * @since New in 1.5.
+ * @since New in 1.8.
Set @a *root_p and @a *path_p to the revision root and path of the
* destination of the most recent copy event that caused @a path to
* exist where it does in @a root, or to NULL if no such copy exists.
- * When non-NULL, allocate @a *root_p and @a *path_p in @a pool.
*
* @a *path_p might be a parent of @a path, rather than @a path
* itself. However, it will always be the deepest relevant path.
@@ -1651,6 +2325,9 @@ Set @a *root_p and @a *path_p to the revision root and path of the
* this function makes sure to set @a *path_p to the longest copy
* destination path that is still a parent of or equal to @a path.
*
+ * Values returned in @a *root_p and @a *path_p will be allocated
+ * from @a pool.
+ *
* @since New in 1.3.
@@ -2111,7 +2788,7 @@ Commit @a txn.
* If @a conflict_p is non-zero, use it to provide details on any
* conflicts encountered merging @a txn with the most recent committed
* revisions. If a conflict occurs, set @a *conflict_p to the path of
- * the conflict in @a txn, with the same lifetime as @a txn;
+ * the conflict in @a txn, allocated within @a pool;
* otherwise, set @a *conflict_p to NULL.
*
* If the commit succeeds, @a txn is invalid.
@@ -2126,6 +2803,25 @@ Commit @a txn.
* the value is a valid revision number, the commit was successful,
* even though a non-@c NULL function return value may indicate that
* something else went wrong in post commit FS processing.
+ *
+ * @note See api-errata/1.8/fs001.txt for information on how this
+ * function was documented in versions prior to 1.8.
+ *
+ * ### need to document this better. there are four combinations of
+ * ### return values:
+ * ### 1) err=NULL. conflict=NULL. new_rev is valid
+ * ### 2) err=SVN_ERR_FS_CONFLICT. conflict is set. new_rev=SVN_INVALID_REVNUM
+ * ### 3) err=!NULL. conflict=NULL. new_rev is valid
+ * ### 4) err=!NULL. conflict=NULL. new_rev=SVN_INVALID_REVNUM
+ * ###
+ * ### some invariants:
+ * ### *conflict_p will be non-NULL IFF SVN_ERR_FS_CONFLICT
+ * ### if *conflict_p is set (and SVN_ERR_FS_CONFLICT), then new_rev
+ * ### will always be SVN_INVALID_REVNUM
+ * ### *conflict_p will always be initialized to NULL, or to a valid
+ * ### conflict string
+ * ### *new_rev will always be initialized to SVN_INVALID_REVNUM, or
+ * ### to a valid, committed revision number
@@ -2479,6 +3175,25 @@ Register an error handling function for Berkeley DB error messages.
* callback is registered with Berkeley DB, and will forward notifications to
* a user provided callback after performing its own processing.
+
+
+ Take an exclusive lock on @a fs to prevent commits and then invoke
+ @a freeze_func passing @a freeze_baton.
+
+ @note The BDB backend doesn't implement this feature so most
+ callers should not call this function directly but should use the
+ higher level svn_repos_freeze() instead.
+
+ @see svn_repos_freeze()
+
+ @since New in 1.8.
+
+
+
+ Callback for svn_fs_freeze().
+
+ @since New in 1.8.
+
Perform any necessary non-catastrophic recovery on the Subversion
@@ -2518,20 +3233,50 @@ Perform any necessary non-catastrophic recovery on the Subversion
+ Like svn_fs_hotcopy2(), but with @a incremental always passed as @c
+ TRUE and without cancellation support.
+
+ @deprecated Provided for backward compatibility with the 1.7 API.
+ @since New in 1.1.
+
+
+
Copy a possibly live Subversion filesystem from @a src_path to
@a dest_path. If @a clean is @c TRUE, perform cleanup on the
source filesystem as part of the copy operation; currently, this
means deleting copied, unused logfiles for a Berkeley DB source
filesystem.
- @since New in 1.1.
+ If @a incremental is TRUE, make an effort to avoid re-copying
+ information already present in the destination where possible. If
+ incremental hotcopy is not implemented, raise
+ #SVN_ERR_UNSUPPORTED_FEATURE.
+
+ Use @a scratch_pool for temporary allocations.
+
+ @since New in 1.8.
Delete the filesystem at @a path.
+ @note: Deleting a filesystem that has an open svn_fs_t is not
+ supported. Clear/destroy all pools used to create/open @a path.
+ See issue 4264.
+
@since New in 1.1.
+
+
+ Return a shallow copy of the configuration parameters used to open
+ @a fs, allocated in @a pool. It may be @c NULL. The contents of the
+ hash contents remains valid only for @a fs's lifetime.
+
+ @note This is just what was passed to svn_fs_create() or svn_fs_open().
+ You may not modify it.
+
+ @since New in 1.8.
+
Return the path to @a fs's repository, allocated in @a pool.
@@ -2556,6 +3301,16 @@ Perform any necessary non-catastrophic recovery on the Subversion
@since New in 1.3.
+
+
+ Callback function type for progress notification.
+
+ @a revision is the number of the revision currently begin processed,
+ #SVN_INVALID_REVNUM if the current stage is not linked to any specific
+ revision. @a baton is the callback baton.
+
+ @since New in 1.8.
+
Upgrade the Subversion filesystem located in the directory @a path
@@ -2653,6 +3408,27 @@ Enable / disable full-text caching for a FSFS repository.
*
* @since New in 1.7.
+Enable / disable revprop caching for a FSFS repository.
+ *
+ * "2" is allowed, too and means "enable if efficient",
+ * i.e. this will not create warning at runtime if there
+ * if no efficient support for revprop caching.
+ *
+ * @since New in 1.8.
+
+Select the cache namespace. If you potentially share the cache with
+ * another FS object for the same repository, objects read through one FS
+ * will not need to be read again for the other. In most cases, that is
+ * a very desirable behavior and the default is, therefore, an empty
+ * namespace.
+ *
+ * If you want to be sure that your FS instance will actually read all
+ * requested data at least once, you need to specify a separate namespace
+ * for it. All repository verification code, for instance, should use
+ * some GUID here that is different each time you open an FS instance.
+ *
+ * @since New in 1.8.
+
@since New in 1.1.
@since New in 1.1.
@since New in 1.1.
@@ -2671,6 +3447,11 @@ Create repository format compatible with Subversion versions
*
* @since New in 1.6.
+Create repository format compatible with Subversion versions
+ * earlier than 1.8.
+ *
+ * @since New in 1.8.
+
@}
Callers should invoke this function to initialize global state in
the FS library before creating FS objects. If this function is
@@ -2743,6 +3524,17 @@ An object representing a Subversion filesystem.
Use @a scratch_pool for all other allocations.
@since New in 1.7.
+
+
+Open @a patch_file at @a local_abspath.
+ * Allocate @a patch_file in @a result_pool.
+ *
+ * @since New in 1.7.
+
+
+An opaque type representing an open patch file.
+ *
+ * @since New in 1.7.
Indicates whether the patch is being interpreted in reverse.
@@ -2755,7 +3547,7 @@ A hash table keyed by property names containing svn_prop_patch_t
object for each property parsed from the patch.
-An array containing an svn_diff_hunk_t object for each hunk parsed
+An array containing an svn_diff_hunk_t * for each hunk parsed
from the patch.
@@ -2911,17 +3703,21 @@ Similar to svn_diff_mem_string_output_unified2() but with
Outputs the @a diff object generated by svn_diff_mem_string_diff()
* in unified diff format on @a output_stream, using @a original
* and @a modified for the text in the output.
- * A diff header is only written to the output if @a with_diff_header
- * is TRUE.
+ *
+ * If @a with_diff_header is TRUE, write a diff header ("---" and "+++"
+ * lines), using @a original_header and @a modified_header to fill the field
+ * after the "---" and "+++" markers; otherwise @a original_header and
+ * @a modified_header are ignored and may be NULL.
*
* Outputs the header and hunk delimiters in @a header_encoding.
* A @a hunk_delimiter can optionally be specified.
* If @a hunk_delimiter is NULL, use the default hunk delimiter "@@".
*
- * @a original_header and @a modified header are
- * used to fill the field after the "---" and "+++" header markers.
+ * As a special case, if the hunk delimiter is "##", then for an incomplete
+ * final line use the text "\ No newline at end of property" instead of
+ * "\ No newline at end of file".
*
- * @since New in 1.7.
+ * @since New in 1.7. Hunk delimiter "##" has the special meaning since 1.8.
@@ -3078,6 +3874,7 @@ A convenience function to produce a diff between two files.
- --ignore-space-change, -b
- --ignore-all-space, -w
- --ignore-eol-style
+ - --show-c-function, -p @since New in 1.5.
- --unified, -u (for compatibility, does nothing).
@@ -3220,6 +4017,9 @@ A vtable for displaying (or consuming) differences between datasources.
* Differences, similarities, and conflicts are described by lining up
* "ranges" of data.
*
+ * Any of the function pointers in this vtable may be NULL to ignore the
+ * corresponding kinds of output.
+ *
* @note These callbacks describe data ranges in units of "tokens".
* A "token" is whatever you've defined it to be in your datasource
* @c svn_diff_fns_t vtable.
@@ -3340,23 +4140,39 @@ An opaque type that represents a difference between either two or
+Similar to svn_wc_read_kind2() but with @a show_deleted always
+ * passed as TRUE.
+ *
+ * @since New in 1.7.
+ * @deprecated Provided for backward compatibility with the 1.7 API.
+
+
+
@}
- Set @a kind to the #svn_node_kind_t of @a abspath. Use @a wc_ctx
- to access the working copy, and @a scratch_pool for all temporary
- allocations.
+ Set @a kind to the #svn_node_kind_t of @a abspath. Use @a wc_ctx to access
+ the working copy, and @a scratch_pool for all temporary allocations.
If @a abspath is not under version control, set @a kind to #svn_node_none.
- If it is versioned but hidden and @a show_hidden is @c FALSE, also return
- #svn_node_none.
- ### What does hidden really mean?
- ### What happens when show_hidden is TRUE?
+ If @a show_hidden and @a show_deleted are both @c FALSE, the kind of
+ scheduled for delete, administrative only 'not present' and excluded
+ nodes is reported as #svn_node_none. This is recommended as a check
+ for 'is there a versioned file or directory here?'
- If the node's info is incomplete, it may or may not have a known node kind
- set. If the kind is not known (yet), set @a kind to #svn_node_unknown.
- Otherwise return the node kind even though the node is marked incomplete.
+ If @a show_deleted is FALSE, but @a show_hidden is @c TRUE then only
+ scheduled for delete and administrative only 'not present' nodes are
+ reported as #svn_node_none. This is recommended as check for
+ 'Can I add a node here?'
- @since New in 1.7.
+ If @a show_deleted is TRUE, but @a show_hidden is FALSE, then only
+ administrative only 'not present' nodes and excluded nodes are reported as
+ #svn_node_none. This behavior is the behavior bescribed as 'hidden'
+ before Subversion 1.7.
+
+ If @a show_hidden and @a show_deleted are both @c TRUE all nodes are
+ reported.
+
+ @since New in 1.8.
@@ -3421,9 +4237,16 @@ Crop @a local_abspath according to @a depth.
*
* @since New in 1.7
+
+
+ ### TODO: Doc string, please.
+
+ @since New in 1.7.
+
- The callback type used by svn_client_get_changelists().
+ The callback type used by svn_wc_get_changelists() and
+ svn_client_get_changelists().
On each invocation, @a path is a newly discovered member of the
changelist, and @a baton is a private function closure.
@@ -3900,7 +4723,7 @@ Similar to #svn_wc_relocation_validator3_t, but with
* the @a root argument.
*
* If @a root is TRUE, then the implementation should make sure that @a url
- * is the repository root. Else, it can be an URL inside the repository.
+ * is the repository root. Else, it can be a URL inside the repository.
*
* @deprecated Provided for backwards compatibility with the 1.4 API.
@@ -3931,7 +4754,7 @@ Relocation validation callback typedef.
(typically #SVN_ERR_CANCELLED), return that error immediately.
For each directory converted, @a notify_func will be called with
- in @a notify_baton action #svn_wc_notify_upgrade_path and as path
+ in @a notify_baton action #svn_wc_notify_upgraded_path and as path
the path of the upgraded directory. @a notify_func may be @c NULL
if this notification is not needed.
@@ -3961,7 +4784,7 @@ Callback for retrieving a repository root for a url from upgrade.
Similar to svn_wc_cleanup3() but uses relative paths and creates its own
- swn_wc_context_t.
+ #svn_wc_context_t.
@since New in 1.2.
@deprecated Provided for backward compatibility with the 1.6 API.
@@ -4037,13 +4860,16 @@ Given a @a path to a wc file, return in @a *contents a readonly stream to
correct for 'svn update', it's incorrect for 'svn merge', and can
cause flawed behavior. (See issue #2035.)
+ @since The base_merge option is not supported since 1.7.
@deprecated Provided for backward compatibility with the 1.2 API.
+ Replaced by svn_wc_merge_props().
Same as svn_wc_merge_props2(), but with a @a conflict_func (and
baton) of NULL.
+ @since New in 1.3. The base_merge option is not supported since 1.7.
@deprecated Provided for backward compatibility with the 1.4 API.
@@ -4053,8 +4879,9 @@ Similar to svn_wc_merge_props3, but takes an access baton and relative
*
* This function has the @a base_merge parameter which (when TRUE) will
* apply @a propchanges to this node's pristine set of properties. This
- * functionality is not supported on newer APIs -- pristine information
- * should only be changed through an update editor drive.
+ * functionality is not supported since API version 1.7 and will give an
+ * error if requested (unless @a dry_run is TRUE). For details see
+ * 'notes/api-errata/1.7/wc006.txt'.
*
* Uses a svn_wc_conflict_resolver_func_t conflict resolver instead of a
* svn_wc_conflict_resolver_func2_t.
@@ -4063,7 +4890,7 @@ Similar to svn_wc_merge_props3, but takes an access baton and relative
* #SVN_ERR_UNVERSIONED_RESOURCE, when svn_wc_merge_props3 would return either
* #SVN_ERR_WC_PATH_NOT_FOUND or #SVN_ERR_WC_PATH_UNEXPECTED_STATUS.
*
- * @since New in 1.5.
+ * @since New in 1.5. The base_merge option is not supported since 1.7.
* @deprecated Provided for backward compatibility with the 1.6 API.
@@ -4079,9 +4906,12 @@ Given a @a local_abspath under version control, merge an array of @a
* If @a state is non-NULL, set @a *state to the state of the properties
* after the merge.
*
- * If conflicts are found when merging working properties, they are
- * described in a temporary .prej file (or appended to an already-existing
- * .prej file), and the entry is marked "conflicted".
+ * If a conflict is found when merging a property, and @a dry_run is
+ * false and @a conflict_func is not null, then call @a conflict_func
+ * with @a conflict_baton and a description of the conflict. If any
+ * conflicts are not resolved by such callbacks, describe the unresolved
+ * conflicts in a temporary .prej file (or append to an already-existing
+ * .prej file) and mark the path as conflicted in the WC DB.
*
* If @a cancel_func is non-NULL, invoke it with @a cancel_baton at various
* points during the operation. If it returns an error (typically
@@ -4125,6 +4955,18 @@ Similar to svn_wc_merge4() but takes relative paths and an access
+Similar to svn_wc_merge5() but with @a merge_props_state and @a
+ * original_props always passed as NULL.
+ *
+ * Unlike svn_wc_merge5(), this function doesn't merge property
+ * changes. Callers of this function must first use
+ * svn_wc_merge_props3() to get this functionality.
+ *
+ * @since New in 1.7.
+ * @deprecated Provided for backwards compatibility with the 1.7 API.
+
+
+
Given absolute paths to three fulltexts, merge the differences between
* @a left_abspath and @a right_abspath into @a target_abspath.
* It may help to know that @a left_abspath, @a right_abspath and @a
@@ -4140,10 +4982,11 @@ Given absolute paths to three fulltexts, merge the differences between
* receive the changes, then translated back again.
*
* If @a target_abspath is absent, or present but not under version
- * control, then set @a *merge_outcome to #svn_wc_merge_no_merge and
+ * control, then set @a *merge_content_outcome to #svn_wc_merge_no_merge and
* return success without merging anything. (The reasoning is that if
* the file is not versioned, then it is probably unrelated to the
- * changes being considered, so they should not be merged into it.)
+ * changes being considered, so they should not be merged into it.
+ * Furthermore, merging into an unversioned file is a lossy operation.)
*
* @a dry_run determines whether the working copy is modified. When it
* is @c FALSE the merge will cause @a target_abspath to be modified, when
@@ -4157,8 +5000,16 @@ Given absolute paths to three fulltexts, merge the differences between
* svn_diff_file_options_parse()). @a merge_options must contain
* const char * elements.
*
- * The outcome of the merge is returned in @a *merge_outcome. If there
- * is a conflict and @a dry_run is @c FALSE, then attempt to call @a
+ * If @a merge_props_state is non-NULL, merge @a prop_diff into the
+ * working properties before merging the text. (If @a merge_props_state
+ * is NULL, do not merge any property changes; in this case, @a prop_diff
+ * is only used to help determine the text merge result.) Handle any
+ * conflicts as described for svn_wc_merge_props3(), with the parameters
+ * @a dry_run, @a conflict_func and @a conflict_baton. Return the
+ * outcome of the property merge in @a *merge_props_state.
+ *
+ * The outcome of the text merge is returned in @a *merge_content_outcome. If
+ * there is a conflict and @a dry_run is @c FALSE, then attempt to call @a
* conflict_func with @a conflict_baton (if non-NULL). If the
* conflict callback cannot resolve the conflict, then:
*
@@ -4189,11 +5040,22 @@ Given absolute paths to three fulltexts, merge the differences between
* begins tracking the two backup files and the version information.
*
* If @a dry_run is @c TRUE no files are changed. The outcome of the merge
- * is returned in @a *merge_outcome.
+ * is returned in @a *merge_content_outcome.
+ * ### (and what about @a *merge_props_state?)
+ *
+ * ### BH: Two kinds of outcome is not how it should be.
+ *
+ * ### For text, we report the outcome as 'merged' if there was some
+ * incoming change that we dealt with (even if we decided to no-op?)
+ * but the callers then convert this outcome into a notification
+ * of 'merged' only if there was already a local modification;
+ * otherwise they notify it as simply 'updated'. But for props
+ * we report a notify state of 'merged' here if there was an
+ * incoming change regardless of the local-mod state. Inconsistent.
*
* Use @a scratch_pool for any temporary allocation.
*
- * @since New in 1.7.
+ * @since New in 1.8.
@@ -4380,6 +5242,10 @@ Given a @a local_abspath to a file or directory under version control,
@defgroup svn_wc_diffs Diffs
@{
+ * DEPRECATED -- please use APIs from svn_client.h
+ *
+ * ---
+ *
* Return an @a editor/@a edit_baton for diffing a working copy against the
* repository. The editor is allocated in @a result_pool; temporary
* calculations are performed in @a scratch_pool.
@@ -4411,10 +5277,13 @@ Given a @a local_abspath to a file or directory under version control,
* @a show_copies_as_adds determines whether paths added with history will
* appear as a diff against their copy source, or whether such paths will
* appear as if they were newly added in their entirety.
+ * @a show_copies_as_adds implies not @a ignore_ancestry.
*
* If @a use_git_diff_format is TRUE, copied paths will be treated as added
* if they weren't modified after being copied. This allows the callbacks
* to generate appropriate --git diff headers for such files.
+ * @a use_git_diff_format implies @a show_copies_as_adds, and as such implies
+ * not @a ignore_ancestry.
*
* Normally, the difference from repository->working_copy is shown.
* If @a reverse_order is TRUE, then show working_copy->repository diffs.
@@ -4433,6 +5302,7 @@ Given a @a local_abspath to a file or directory under version control,
* editor.
*
* @since New in 1.7.
+ * @deprecated Provided for backward compatibility with the 1.7 API.
@@ -4441,19 +5311,61 @@ Canonicalize the value of an svn:* property @a propname with
*
* If the property is not appropriate for a node of kind @a kind, or
* is otherwise invalid, throw an error. Otherwise, set @a *propval_p
- * to a canonicalized version of the property value. If @a
- * skip_some_checks is TRUE, only some validity checks are taken.
+ * to a canonicalized version of the property value.
+ *
+ * The exact set of canonicalizations and checks may vary across different
+ * versions of this API. Currently:
+ *
+ * - svn:executable
+ * - svn:needs-lock
+ * - svn:special
+ * - set the value to '*'
+ *
+ * - svn:keywords
+ * - strip leading and trailing white space
+ *
+ * - svn:ignore
+ * - svn:global-ignores
+ * - svn:auto-props
+ * - add a final a newline character if missing
+ *
+ * - svn:externals
+ * - add a final a newline character if missing
+ * - check for valid syntax
+ * - check for no duplicate entries
+ *
+ * - svn:mergeinfo
+ * - canonicalize
+ * - check for validity
+ *
+ * Also, unless @a skip_some_checks is TRUE:
+ *
+ * - svn:eol-style
+ * - strip leading and trailing white space
+ * - check value is recognized
+ * - check file content has a self-consistent EOL style
+ * (but not necessarily that it matches @a propval)
*
- * Some validity checks require access to the contents and MIME type
- * of the target if it is a file; they will call @a prop_getter with @a
- * getter_baton, which then needs to set the MIME type and print the
- * contents of the file to the given stream.
+ * - svn:mime-type
+ * - strip white space
+ * - check for reasonable syntax
+ *
+ * The EOL-style check (if not skipped) requires access to the contents and
+ * MIME type of the target if it is a file. It will call @a prop_getter with
+ * @a getter_baton. The callback must set the MIME type and/or write the
+ * contents of the file to the given stream. If @a skip_some_checks is true,
+ * then @a prop_getter is not used and may be NULL.
*
* @a path should be the path of the file in question; it is only used
* for error messages.
*
+ * ### The error code on validity check failure should be specified, and
+ * should be a single code or a very small set of possibilities.
+ *
* ### This is not actually related to the WC, but it does need to call
- * ### svn_wc_parse_externals_description2.
+ * ### svn_wc_parse_externals_description3.
+ *
+ * @since New in 1.5.
@@ -4468,6 +5380,8 @@ Callback type used by #svn_wc_canonicalize_svn_prop.
* (Currently, this is used if you are attempting to set the
* #SVN_PROP_EOL_STYLE property, to make sure that the value matches
* the mime type and contents.)
+ *
+ * @since New in 1.5.
@@ -4507,7 +5421,7 @@ Return TRUE iff @a name is a 'normal' property name. 'Normal' is
Similar to svn_wc_prop_set4(), but with a #svn_wc_adm_access_t /
* relative path parameter pair, no @a depth parameter, no changelist
- * filtering (for the depth-based property setting), and no cancelation.
+ * filtering (for the depth-based property setting), and no cancellation.
*
* @since New in 1.6.
* @deprecated Provided for backwards compatibility with the 1.6 API.
@@ -4518,19 +5432,29 @@ Similar to svn_wc_prop_set4(), but with a #svn_wc_adm_access_t /
NULL, remove property @a name from @a local_abspath. Use @a wc_ctx to
access @a local_abspath.
- If @a skip_checks is TRUE, do no validity checking. But if @a
- skip_checks is FALSE, and @a name is not a valid property for @a
- path, return an error, either #SVN_ERR_ILLEGAL_TARGET (if the
+ @a name may be a regular property or a "wc property". If @a name is
+ an "entry property", return the error #SVN_ERR_BAD_PROP_KIND (even if
+ @a skip_checks is TRUE).
+
+ If @a name is a "wc property", then just update the WC DAV cache for
+ @a local_abspath with @a name and @a value. In this case, @a depth
+ must be #svn_depth_empty.
+
+ The rest of this description applies when @a name is a regular property.
+
+ If @a name is a name in the reserved "svn:" name space, and @a value is
+ non-null, then canonicalize the property value and check the property
+ name and value as documented for svn_wc_canonicalize_svn_prop().
+ @a skip_checks controls the level of checking as documented there.
+
+ Return an error if the canonicalization or the check fails.
+ The error will be either #SVN_ERR_ILLEGAL_TARGET (if the
property is not appropriate for @a path), or
#SVN_ERR_BAD_MIME_TYPE (if @a name is "svn:mime-type", but @a value
is not a valid mime-type).
+ ### That is not currently right -- several other errors can be raised.
- @a depth follows the usual semeatic for depth. If the property is a
- wc property, @a depth must be #svn_depth_empty.
-
- @a name may be a wc property or a regular property; but if it is an
- entry property, return the error #SVN_ERR_BAD_PROP_KIND, even if
- @a skip_checks is TRUE.
+ @a depth follows the usual semantics for depth.
@a changelist_filter is an array of const char * changelist
names, used as a restrictive filter on items whose properties are
@@ -4548,6 +5472,14 @@ Similar to svn_wc_prop_set4(), but with a #svn_wc_adm_access_t /
Use @a scratch_pool for temporary allocation.
+ @note If the caller is setting both svn:mime-type and svn:eol-style in
+ separate calls, and @a skip_checks is false, there is an ordering
+ dependency between them, as the validity check for svn:eol-style makes
+ use of the current value of svn:mime-type.
+
+ ### The error code on validity check failure should be specified, and
+ should be a single code or a very small set of possibilities.
+
@since New in 1.7.
@@ -4671,6 +5603,10 @@ Similar to svn_wc_get_switch_editor4, but uses access batons and relative
+ DEPRECATED -- please use APIs from svn_client.h
+
+ ---
+
A variant of svn_wc_get_update_editor4().
Set @a *editor and @a *edit_baton to an editor and baton for "switching"
@@ -4681,6 +5617,7 @@ Similar to svn_wc_get_switch_editor4, but uses access batons and relative
All other parameters behave as for svn_wc_get_update_editor4().
@since New in 1.7.
+ @deprecated Provided for backward compatibility with the 1.7 API.
@@ -4729,6 +5666,10 @@ Similar to svn_wc_get_update_editor4, but uses access batons and relative
+ DEPRECATED -- please use APIs from svn_client.h
+
+ ---
+
Set @a *editor and @a *edit_baton to an editor and baton for updating a
working copy.
@@ -4797,11 +5738,16 @@ Similar to svn_wc_get_update_editor4, but uses access batons and relative
the ambient depth filtering, so this doesn't have to be handled in the
editor.
+ If @a clean_checkout is TRUE, assume that we are checking out into an
+ empty directory, and so bypass a number of conflict checks that are
+ unnecessary in this case.
+
If @a fetch_dirents_func is not NULL, the update editor may call this
callback, when asked to perform a depth restricted update. It will do this
before returning the editor to allow using the primary ra session for this.
@since New in 1.7.
+ @deprecated Provided for backward compatibility with the 1.7 API.
@@ -4877,21 +5823,41 @@ Conditionally split @a path into an @a anchor and @a target for the
-@defgroup svn_wc_roots Working copy roots
-@{
-
Set @a *wc_root to @c TRUE if @a local_abspath represents a "working copy
* root", @c FALSE otherwise. Here, @a local_abspath is a "working copy root"
- * if its parent directory is not a WC or if its parent directory's repository
- * URL is not the parent of its own repository URL. Thus, a switched subtree is
- * considered to be a working copy root. Also, a deleted tree-conflict
- * victim is considered a "working copy root" because it has no URL.
+ * if its parent directory is not a WC or if it is switched. Also, a deleted
+ * tree-conflict victim is considered a "working copy root" because it has no
+ * URL.
*
* If @a local_abspath is not found, return the error #SVN_ERR_ENTRY_NOT_FOUND.
*
* Use @a scratch_pool for any temporary allocations.
*
+ * @note For legacy reasons only a directory can be a wc-root. However, this
+ * function will also set wc_root to @c TRUE for a switched file.
+ *
* @since New in 1.7.
+ * @deprecated Provided for backward compatibility with the 1.7 API. Consider
+ * using svn_wc_check_root() instead.
+
+
+
+@defgroup svn_wc_roots Working copy roots
+@{
+
+If @a is_wcroot is not @c NULL, set @a *is_wcroot to @c TRUE if @a
+ * local_abspath is the root of the working copy, otherwise to @c FALSE.
+ *
+ * If @a is_switched is not @c NULL, set @a *is_switched to @c TRUE if @a
+ * local_abspath is not the root of the working copy, and switched against its
+ * parent.
+ *
+ * If @a kind is not @c NULL, set @a *kind to the node kind of @a
+ * local_abspath.
+ *
+ * Use @a scratch_pool for any temporary allocations.
+ *
+ * @since New in 1.8.
@@ -5230,7 +6196,8 @@ Similar to svn_wc_resolved_conflict5, but takes an absolute path
Remove @a local_abspath from revision control. @a wc_ctx must
- * hold a write lock.
+ * hold a write lock on the parent of @a local_abspath, or if that is a
+ * WC root then on @a local_abspath itself.
*
* If @a local_abspath is a file, all its info will be removed from the
* administrative area. If @a local_abspath is a directory, then the
@@ -5363,7 +6330,7 @@ and relative path instead of a context and absolute path.
working copy as a copy of the original location. The separate working
copy will be integrated by this step. In this case, which is only used
by code like that of "svn cp URL@rev path" @a copyfrom_url and
- @a copyfrom_rev MUST BE the the url and revision of @a local_abspath
+ @a copyfrom_rev MUST BE the url and revision of @a local_abspath
in the separate working copy.
2a) If the node was not versioned before it will be scheduled as a local
@@ -5396,8 +6363,30 @@ and relative path instead of a context and absolute path.
+ * Similar to svn_wc_add_from_disk2(), but always passes NULL for @a
+ * props.
+ *
+ * This is a replacement for svn_wc_add4() case 2a (which see for
+ * details).
+
+ * @see svn_wc_add4()
+ *
+ * @since New in 1.7.
+ * @deprecated Provided for backward compatibility with the 1.7 API.
+
+
+
Schedule the single node that exists on disk at @a local_abspath for
- addition to the working copy. The added node will have no properties.
+ addition to the working copy. The added node will have the properties
+ provided in @a props, or none if that is NULL.
+
+ Check and canonicalize the properties in the same way as
+ svn_wc_prop_set4(). Return an error and don't add the node if the
+ properties are not valid on this node. Unlike svn_wc_prop_set4()
+ there is no option to skip some of the checks and canonicalizations.
+
+ ### The error code on validity check failure should be specified, and
+ preferably should be a single code.
The versioned state of the parent path must be a modifiable directory,
and the versioned state of @a local_abspath must be either nonexistent or
@@ -5406,13 +6395,9 @@ and relative path instead of a context and absolute path.
If @a local_abspath does not exist as file, directory or symlink, return
#SVN_ERR_WC_PATH_NOT_FOUND.
- This is a replacement for svn_wc_add4() case 2a.
-
- ### TODO: Allow the caller to provide the node's properties?
-
### TODO: Split into add_dir, add_file, add_symlink?
- @since New in 1.7.
+ @since New in 1.8.
@@ -5503,6 +6488,8 @@ and relative path instead of a context and absolute path.
Use @a scratch_pool for temporary allocations.
@since New in 1.7.
+ @deprecated Provided for backward compatibility with the 1.7 API.
+ @see svn_client_move7()
@@ -5601,6 +6588,10 @@ Similar to svn_wc_copy3(), but takes access batons and a relative path
+ DEPRECATED -- please use APIs from svn_client.h
+
+ ---
+
Set @a *editor and @a *edit_baton to an editor that generates
#svn_wc_status3_t structures and sends them through @a status_func /
@a status_baton. @a anchor_abspath is a working copy directory
@@ -5662,6 +6653,7 @@ Similar to svn_wc_copy3(), but takes access batons and a relative path
in a subpool of @a result_pool.
@since New in 1.7.
+ @deprecated Provided for backward compatibility with the 1.7 API.
@@ -5738,11 +6730,6 @@ Similar to svn_wc_copy3(), but takes access batons and a relative path
@a scratch_pool will be cleared between invocations to the callback.
- ### we might be revamping the status infrastructure, and this callback
- ### could totally disappear by the end of 1.7 development. however, we
- ### need to mark the STATUS parameter as "const" so that it is easier
- ### to reason about who/what can modify those structures.
-
@since New in 1.7.
@@ -5822,7 +6809,7 @@ a directory can be 'locked' if a working copy update was interrupted.
Can be @c NULL if not under version control.
- Same as #svn_wc_status2_t, but without the #svn_lock_t 'repos_lock' field.
+ Same as #svn_wc_status2_t, but without the #svn_lock_t 'repos_lock', const char 'url', #svn_revnum_t 'ood_last_cmt_rev', apr_time_t 'ood_last_cmt_date', #svn_node_kind_t 'ood_kind', const char 'ood_last_cmt_author', #svn_wc_conflict_description_t 'tree_conflict', #svn_boolean_t 'file_external', #svn_wc_status_kind 'pristine_text_status', and #svn_wc_status_kind 'pristine_prop_status' fields.
@deprecated Provided for backward compatibility with the 1.1 API.
@@ -5908,6 +6895,44 @@ Can be @c NULL if not under version control.
@since New in 1.2.
@deprecated Provided for backward compatibility with the 1.6 API.
+
+
+@c TRUE iff the item is a file brought in by an svn:externals definition.
+ * @since New in 1.8.
+
+
+Set to the local absolute path that this node was moved to, if this file
+ * or directory has been moved away locally and corresponds to the root
+ * of the destination side of the move. Otherwise set to NULL.
+ *
+ * Note: Saying just "root" here could be misleading. For example:
+ * svn mv A AA;
+ * svn mv AA/B BB;
+ * creates a situation where A/B is moved-to BB, but one could argue that
+ * the move source's root actually was AA/B. Note that, as far as the
+ * working copy is concerned, above case is exactly identical to:
+ * svn mv A/B BB;
+ * svn mv A AA;
+ * In both situations, @a moved_to_abspath would be set for nodes A (moved
+ * to AA) and A/B (moved to BB), only.
+ *
+ * This will be NULL for moved-away nodes that were just part of a subtree
+ * that was moved along (and are not themselves a root of a different move
+ * operation).
+ *
+ * @since New in 1.8.
+
+
+@}
+Set to the local absolute path that this node was moved from, if this
+ * file or directory has been moved here locally and is the root of that
+ * move. Otherwise set to NULL.
+ *
+ * This will be NULL for moved-here nodes that are just part of a subtree
+ * that was moved along (and are not themselves a root of a different move
+ * operation).
+ *
+ * @since New in 1.8.
Set to the user name of the youngest commit, or @c NULL if not
@@ -6346,6 +7371,14 @@ Given @a local_abspath in a dir under version control, decide if it is
@since New in 1.7.
+
+
+The path the node was moved to, if it was moved away. Else NULL.
+ * @since New in 1.8.
+
+
+The path the node was moved from, if it was moved here. Else NULL.
+ * @since New in 1.8.
The local absolute path of the working copy root.
@@ -6363,6 +7396,27 @@ The size of the file after being translated into its local
representation, or #SVN_INVALID_FILESIZE if unknown.
Not applicable for directories.
+
+
+The depth of the item, see #svn_depth_t
+
+
+A changelist the item is in, @c NULL if this node is not in a
+ * changelist.
+
+
+The checksum of the node, if it is a file.
+
+
+If copied, the revision from which the copy was made,
+ * else #SVN_INVALID_REVNUM.
+
+
+If copied, the URL from which the copy was made, else @c NULL.
+
+
+The schedule of this item
+ * ### Do we still need schedule?
@}
@@ -6717,17 +7771,15 @@ Set @a *modified_p to non-zero if @a local_abspath's text is modified
* with regard to the base revision, else set @a *modified_p to zero.
* @a local_abspath is the absolute path to the file.
*
- * If @a force_comparison is @c TRUE, this function will not allow
- * early return mechanisms that avoid actual content comparison.
- * Instead, if there is a text base, a full byte-by-byte comparison
- * will be done, and the entry checksum verified as well. (This means
- * that if the text base is much longer than the working file, every
- * byte of the text base will still be examined.)
+ * This function uses some heuristics to avoid byte-by-byte comparisons
+ * against the base text (eg. file size and its modification time).
*
* If @a local_abspath does not exist, consider it unmodified. If it exists
* but is not under revision control (not even scheduled for
* addition), return the error #SVN_ERR_ENTRY_NOT_FOUND.
*
+ * @a unused is ignored.
+ *
* @since New in 1.7.
@@ -6997,7 +8049,7 @@ A callback used in merge, update and switch for resolving conflicts
*
* The values #svn_wc_conflict_choose_mine_conflict and
* #svn_wc_conflict_choose_theirs_conflict are not legal for conflicts
- * in binary files or properties.
+ * in binary files or binary properties.
*
* Implementations of this callback are free to present the conflict
* using any user interface. This may include simple contextual
@@ -7112,7 +8164,7 @@ Similar to svn_wc_conflict_descriptor_create_prop(), but returns
Set the @c local_abspath field of the created struct to @a local_abspath
(which must be an absolute path), the @c kind field
- to #svn_wc_conflict_kind_prop, the @c node_kind to @a node_kind, and
+ to #svn_wc_conflict_kind_property, the @c node_kind to @a node_kind, and
the @c property_name to @a property_name.
@note: It is the caller's responsibility to set the other required fields
@@ -7324,9 +8376,9 @@ A struct that describes a conflict that has occurred in the
* @note Fields may be added to the end of this structure in future
* versions. Therefore, to preserve binary compatibility, users
* should not directly allocate structures of this type but should use
- * svn_wc_create_conflict_description_text2() or
- * svn_wc_create_conflict_description_prop2() or
- * svn_wc_create_conflict_description_tree2() instead.
+ * svn_wc_conflict_description_create_text2() or
+ * svn_wc_conflict_description_create_prop2() or
+ * svn_wc_conflict_description_create_tree2() instead.
*
* @since New in 1.7.
@@ -7339,20 +8391,36 @@ Return a duplicate of @a version, allocated in @a pool.
+Similar to svn_wc_conflict_version_create2(), but doesn't set all
+ * required values.
+ *
+ * @since New in 1.6.
+ * @deprecated Provided for backward compatibility with the 1.7 API.
+
+
+
Allocate an #svn_wc_conflict_version_t structure in @a pool,
initialize to contain a conflict origin, and return it.
- Set the @c repos_url field of the created struct to @a repos_url, the
- @c path_in_repos field to @a path_in_repos, the @c peg_rev field to
- @a peg_rev and the the @c node_kind to @c node_kind. Make only shallow
+ Set the @c repos_url field of the created struct to @a repos_root_url,
+ the @c path_in_repos field to @a repos_relpath, the @c peg_rev field to
+ @a revision and the @c node_kind to @a kind. Make only shallow
copies of the pointer arguments.
- @since New in 1.6.
+ @a repos_root_url, @a repos_relpath and @a revision must be valid,
+ non-null values. @a repos_uuid should be a valid UUID, but can be
+ NULL if unknown. @a kind can be any kind, even 'none' or 'unknown'.
+
+ @since New in 1.8.
+
+
+UUID of the repository (or NULL if unknown.)
+ * @since New in 1.8.
@}
-Info about this node
+The node kind. Can be any kind, including 'none' or 'unknown'.
path within repos; must not start with '/'
@@ -7410,6 +8478,12 @@ The pre-existing condition which is causing a state of conflict.
*
* @since New in 1.5.
+
+
+Object is moved here. @since New in 1.8.
+
+
+Object is moved away. @since New in 1.8.
Object is already replaced. @since New in 1.7.
@@ -7574,7 +8648,9 @@ Similar to @c path, but if non-NULL the notification is about a url.
* @since New in 1.6
-When @c action is #svn_wc_notify_merge_begin, and both the
+When @c action is #svn_wc_notify_merge_begin or
+ * #svn_wc_notify_foreign_merge_begin or
+ * #svn_wc_notify_merge_record_info_begin, and both the
* left and right sides of the merge are from the same URL. In all
* other cases, it is @c NULL. @since New in 1.5
@@ -7624,7 +8700,7 @@ Action that describes what happened to #svn_wc_notify_t.path.
Path, either absolute or relative to the current working directory
* (i.e., not relative to an anchor). @c path is "." or another valid path
- * value for compatibility reasons when the real target is an url that
+ * value for compatibility reasons when the real target is a url that
* is available in @c url.
@@ -7633,7 +8709,7 @@ Path, either absolute or relative to the current working directory
@c kind, @c content_state, @c prop_state and @c lock_state are from
after @c action, not before.
- @note If @c action is #svn_wc_notify_update (### what?), then @c path has
+ @note If @c action is #svn_wc_notify_update_completed, then @c path has
already been installed, so it is legitimate for an implementation of
#svn_wc_notify_func2_t to examine @c path in the working copy.
@@ -7719,6 +8795,41 @@ Notifier doesn't know or isn't saying.
also used for checkouts, switches, and merges.
The type of action occurring.
+
+
+A move in the working copy has been broken, i.e. degraded into a
+ * copy + delete. The notified path is the move source (the deleted path).
+ * ### TODO: Provide path to move destination as well?
+ * @since New in 1.8.
+
+
+A copy from a foreign repository has started
+ * @since New in 1.8.
+
+
+The current operation left local changes of something that was deleted
+ * The changes are available on (and below) the notified path
+ * @since New in 1.8.
+
+
+Conflict resolver is done.
+ * This can be used by clients to detect when to display conflict summary
+ * information, for example.
+ * @since New in 1.8.
+
+
+Conflict resolver is starting.
+ * This can be used by clients to detect when to display conflict summary
+ * information, for example.
+ * @since New in 1.8.
+
+
+Operation failed because a node is obstructed.
+ * @since New in 1.8.
+
+
+Just the lock on a file was removed during update.
+ * @since New in 1.8.
The operation skipped the path because it was conflicted.
@@ -7796,7 +8907,7 @@ Mergeinfo describing a merge was recorded.
* @since New in 1.7.
-An working copy directory was upgraded to the latest format
+A working copy directory was upgraded to the latest format.
* @since New in 1.7.
@@ -7807,7 +8918,7 @@ A node below an existing node was deleted during update.
* @since New in 1.7.
-A node below an exising node was updated during update.
+A node below an existing node was updated during update.
* @since New in 1.7.
@@ -8000,8 +9111,8 @@ Adding a path to revision control.
of those objects. If the @a url member refers to an absolute URL,
it will be canonicalized as URL consistent with the way URLs are
canonicalized throughout the Subversion API. If, however, the
- @a url member makes use of the recognized (and proprietary)
- relative URL syntax, "canonicalization" is a less easily-defined
+ @a url member makes use of the recognized (SVN-specific) relative
+ URL syntax for svn:externals, "canonicalization" is an ill-defined
concept which may even result in munging the relative URL syntax
beyond recognition. You've been warned.
@@ -8046,6 +9157,15 @@ Same as #svn_wc_external_item2_t.target_dir
+Same as svn_wc_external_item2_create() except the pointer to the new
+ * empty item is 'const' which is stupid since the next thing you need to do
+ * is fill in its fields.
+ *
+ * @deprecated Provided for backward compatibility with the 1.7 API.
+ * @since New in 1.5.
+
+
+
Initialize an external item.
Set @a *item to an external item object, allocated in @a pool.
@@ -8057,7 +9177,7 @@ Same as #svn_wc_external_item2_t.target_dir
The current implementation never returns error, but callers should
still check for error, for compatibility with future versions.
- @since New in 1.5.
+ @since New in 1.8.
@@ -8071,7 +9191,8 @@ What revision to check out. The only valid kinds for this are
svn_opt_revision_head.
-Where to check out from.
+Where to check out from. This is possibly a relative external URL, as
+ * allowed in externals definitions, but without the peg revision.
The name of the subdirectory into which this external should be
@@ -8086,7 +9207,7 @@ One external item. This usually represents one line from an
* canonicalized.
*
* In order to avoid backwards compatibility problems clients should use
- * svn_wc_external_item_create() to allocate and initialize this structure
+ * svn_wc_external_item2_create() to allocate and initialize this structure
* instead of doing so themselves.
*
* @since New in 1.5.
@@ -8641,7 +9762,7 @@ Initialize libsvn_ra_local.
@deprecated Provided for backward compatibility with the 1.0 API.
-Initialize libsvn_ra_neon.
+Initialize libsvn_ra_serf.
*
* @deprecated Provided for backward compatibility with the 1.1 API.
@@ -8773,7 +9894,7 @@ Call svn_ra_open() and set @a session_baton to an object representing
Short doc string printed out by `svn --version`
-The proper name of the RA library, (like "ra_neon" or "ra_local")
+The proper name of the RA library, (like "ra_serf" or "ra_local")
Using this callback struct is similar to calling the newer public
@@ -8820,6 +9941,20 @@ The proper name of the RA library, (like "ra_neon" or "ra_local")
@since New in 1.7.
+ The capability to get inherited properties.
+
+ @since New in 1.8.
+
+ The capability of a server to automatically remove transaction
+ properties prefixed with SVN_PROP_EPHEMERAL_PREFIX.
+
+ @since New in 1.8.
+
+ The capability of a server to walk revisions backwards in
+ svn_ra_get_file_revs2
+
+ @since New in 1.8.
+
@}
Append a textual list of all available RA modules to the stringbuf
@a output.
@@ -8843,6 +9978,26 @@ The proper name of the RA library, (like "ra_neon" or "ra_local")
@since New in 1.5.
+
+
+ Set @a *inherited_props to a depth-first ordered array of
+ #svn_prop_inherited_item_t * structures representing the properties
+ inherited by @a path at @a revision (or the 'head' revision if
+ @a revision is @c SVN_INVALID_REVNUM). Interpret @a path relative to
+ the URL in @a session. Use @a pool for all allocations. If no
+ inheritable properties are found, then set @a *inherited_props to
+ an empty array.
+
+ The #svn_prop_inherited_item_t->path_or_url members of the
+ #svn_prop_inherited_item_t * structures in @a *inherited_props are
+ paths relative to the repository root URL (of the repository which
+ @a ra_session is associated).
+
+ Allocate @a *inherited_props in @a result_pool. Use @a scratch_pool
+ for temporary allocations.
+
+ @since New in 1.8.
+
Given @a path at revision @a peg_revision, set @a *revision_deleted to the
@@ -8973,7 +10128,8 @@ The proper name of the RA library, (like "ra_neon" or "ra_local")
Lock each path in @a path_revs, which is a hash whose keys are the
paths to be locked, and whose values are the corresponding base
- revisions for each path.
+ revisions for each path. The keys are (const char *) and the
+ revisions are (svn_revnum_t *).
Note that locking is never anonymous, so any server implementing
this function will have to "pull" a username from the client, if
@@ -9037,6 +10193,10 @@ The proper name of the RA library, (like "ra_neon" or "ra_local")
server doesn't implement it, an alternative (but much slower)
implementation based on svn_ra_get_log2() is used.
+ On subversion 1.8 and newer servers this function has been enabled
+ to support reversion of the revision range for @a include_merged_revision
+ @c FALSE reporting by switching @a end with @a start.
+
@since New in 1.5.
@@ -9153,8 +10313,9 @@ The proper name of the RA library, (like "ra_neon" or "ra_local")
If @a discover_changed_paths, then each call to @a receiver passes a
const apr_hash_t * for the receiver's @a changed_paths argument;
- the hash's keys are all the paths committed in that revision.
- Otherwise, each call to receiver passes NULL for @a changed_paths.
+ the hash's keys are all the paths committed in that revision, the hash's
+ values are const svn_log_changed_path2_t * for each committed
+ path. Otherwise, each call to receiver passes NULL for @a changed_paths.
If @a strict_node_history is set, copy history will not be traversed
(if any exists) when harvesting the revision logs for each path.
@@ -9162,8 +10323,9 @@ The proper name of the RA library, (like "ra_neon" or "ra_local")
If @a include_merged_revisions is set, log information for revisions
which have been merged to @a targets will also be returned.
- If @a revprops is NULL, retrieve all revprops; else, retrieve only the
- revprops named in the array (i.e. retrieve none if the array is empty).
+ If @a revprops is NULL, retrieve all revision properties; else, retrieve
+ only the revision properties named by the (const char *) array elements
+ (i.e. retrieve none if the array is empty).
If any invocation of @a receiver returns error, return that error
immediately and without wrapping it.
@@ -9212,7 +10374,7 @@ The proper name of the RA library, (like "ra_neon" or "ra_local")
it's another form of svn_ra_do_update2().
@note This function cannot be used to diff a single file, only a
- working copy directory. See the svn_ra_do_switch2() function
+ working copy directory. See the svn_ra_do_switch3() function
for more details.
The client initially provides a @a diff_editor/@a diff_baton to the RA
@@ -9328,46 +10490,25 @@ The proper name of the RA library, (like "ra_neon" or "ra_local")
- Ask the RA layer to 'switch' a working copy to a new
- @a switch_url; it's another form of svn_ra_do_update().
-
- The client initially provides a @a switch_editor/@a switch_baton to the RA
- layer; this editor contains knowledge of where the change will
- begin in the working copy (when open_root() is called).
-
- In return, the client receives a @a reporter/@a report_baton. The
- client then describes its working copy by making calls into the
- @a reporter.
-
- When finished, the client calls @a reporter->finish_report(). The
- RA layer then does a complete drive of @a switch_editor, ending with
- close_edit(), to switch the working copy.
-
- @a switch_target is an optional single path component will restrict
- the scope of things affected by the switch to an entry in the
- directory represented by the @a session's URL, or empty if the
- entire directory is meant to be switched.
+ Similar to svn_ra_do_switch3(), but always ignoring ancestry and
+ never sending copyfrom_args.
- Switch the target only as deeply as @a depth indicates.
+ @since New in 1.5.
+ @deprecated Provided for compatibility with the 1.7 API.
- The working copy will be switched to @a revision_to_switch_to, or the
- "latest" revision if this arg is invalid.
+
+
+ Ask the RA layer to switch a working copy to a new revision and URL.
- The caller may not perform any RA operations using
- @a session before finishing the report, and may not perform
- any RA operations using @a session from within the editing
- operations of @a switch_editor.
+ This is similar to svn_ra_do_update3(), but also changes the URL of
+ every node in the target tree to a child of the @a switch_url. In
+ contrast, update changes only the revision numbers, leaving any
+ switched subtrees still switched.
- Use @a pool for memory allocation.
+ @note Pre Subversion 1.8 svnserve based servers always ignore ancestry
+ and never send copyfrom data.
- @note The reporter provided by this function does NOT supply copy-
- from information to the diff editor callbacks.
-
- @note In order to prevent pre-1.5 servers from doing more work than
- needed, and sending too much data back, a pre-1.5 'recurse'
- directive may be sent to the server, based on @a depth.
-
- @since New in 1.5.
+ @since New in 1.8.
@@ -9380,7 +10521,14 @@ The proper name of the RA library, (like "ra_neon" or "ra_local")
- Ask the RA layer to update a working copy.
+ Similar to svn_ra_do_update3(), but always ignoring ancestry.
+
+ @since New in 1.5.
+ @deprecated Provided for compatibility with the 1.4 API.
+
+
+
+ Ask the RA layer to update a working copy to a new revision.
The client initially provides an @a update_editor/@a update_baton to the
RA layer; this editor contains knowledge of where the change will
@@ -9406,6 +10554,12 @@ The proper name of the RA library, (like "ra_neon" or "ra_local")
(Note: this means that any subsequent txdeltas coming from the
server are presumed to apply against the copied file!)
+ Use @a ignore_ancestry to control whether or not items being
+ updated will be checked for relatedness first. Unrelated items
+ are typically transmitted to the editor as a deletion of one thing
+ and the addition of another, but if this flag is @c TRUE,
+ unrelated items will be diffed as if they were related.
+
The working copy will be updated to @a revision_to_update_to, or the
"latest" revision if this arg is invalid.
@@ -9413,7 +10567,8 @@ The proper name of the RA library, (like "ra_neon" or "ra_local")
finishing the report, and may not perform any RA operations using
@a session from within the editing operations of @a update_editor.
- Use @a pool for memory allocation.
+ Allocate @a *reporter and @a *report_baton in @a result_pool. Use
+ @a scratch_pool for temporary allocations.
@note The reporter provided by this function does NOT supply copy-
from information to the diff editor callbacks.
@@ -9422,7 +10577,14 @@ The proper name of the RA library, (like "ra_neon" or "ra_local")
needed, and sending too much data back, a pre-1.5 'recurse'
directive may be sent to the server, based on @a depth.
- @since New in 1.5.
+ @note Pre Subversion 1.8 svnserve based servers never ignore ancestry.
+
+ @note This differs from calling svn_ra_do_switch3() with the current
+ URL of the target node. Update changes only the revision numbers,
+ leaving any switched subtrees still switched, whereas switch changes
+ every node in the tree to a child of the same URL.
+
+ @since New in 1.8.
@@ -9550,12 +10712,12 @@ The proper name of the RA library, (like "ra_neon" or "ra_local")
or @c SVN_PROP_REVISION_AUTHOR.
Before @c close_edit returns, but after the commit has succeeded,
- it will invoke @a callback (if non-NULL) with the new revision number,
- the commit date (as a const char * ), commit author (as a
- const char * ), and @a callback_baton as arguments. If
- @a callback returns an error, that error will be returned from @c
- close_edit, otherwise @c close_edit will return successfully
- (unless it encountered an error before invoking @a callback).
+ it will invoke @a commit_callback (if non-NULL) with filled-in
+ #svn_commit_info_t *, @a commit_baton, and @a pool or some subpool
+ thereof as arguments. If @a commit_callback returns an error, that error
+ will be returned from @c * close_edit, otherwise @c close_edit will return
+ successfully (unless it encountered an error before invoking
+ @a commit_callback).
The callback will not be called if the commit was a no-op
(i.e. nothing was committed);
@@ -9660,8 +10822,8 @@ Convert @a url into a path relative to the repository root URL of
-Convert @a url into a path relative to the URL at which @a ra_session
- * is parented, setting @a *rel_path to that value. If @a url is not
+Convert @a url into a path relative to the session URL of @a ra_session,
+ * setting @a *rel_path to that value. If @a url is not
* a child of the session URL, return @c SVN_ERR_RA_ILLEGAL_URL.
*
* The returned path is uri decoded to allow using it with the ra or other
@@ -9671,7 +10833,7 @@ Convert @a url into a path relative to the URL at which @a ra_session
-Set @a *url to the repository URL to which @a ra_session was
+Set @a *url to the session URL -- the URL to which @a ra_session was
* opened or most recently reparented.
*
* @since New in 1.5.
@@ -9724,6 +10886,17 @@ Similar to svn_ra_open4(), but with @a corrected_url always passed
corrected_url is NULL, return an #SVN_ERR_RA_SESSION_URL_MISMATCH
error. Allocate all returned items in @a pool.
+ The @a repos_URL need not point to the root of the repository: subject
+ to authorization, it may point to any path within the repository, even
+ a path at which no node exists in the repository. The session will
+ remember this URL as its "session URL" (also called "session root URL"),
+ until changed by svn_ra_reparent(). Many RA functions take or return
+ paths that are relative to the session URL.
+
+ If a @a corrected_url is returned, it will point to the same path
+ within the new repository root URL that @a repos_URL pointed to within
+ the old repository root URL.
+
Return @c SVN_ERR_RA_UUID_MISMATCH if @a uuid is non-NULL and not equal
to the UUID of the repository at @c repos_URL.
@@ -9732,7 +10905,10 @@ Similar to svn_ra_open4(), but with @a corrected_url always passed
@a config is a hash mapping const char * keys to
@c svn_config_t * values. For example, the @c svn_config_t for the
- "~/.subversion/config" file is under the key "config".
+ "~/.subversion/config" file is under the key "config". @a config may
+ be NULL. This function examines some config settings under the
+ "servers" key (if present) before loading the required RA module, and
+ the RA module may also examine any config settings.
All RA requests require a session; they will continue to
use @a pool for memory allocation.
@@ -9744,7 +10920,7 @@ Similar to svn_ra_open4(), but with @a corrected_url always passed
A repository access session. This object is used to perform requests
- to a repository, identified by an URL.
+ to a repository, identified by a URL.
@since New in 1.2.
@@ -9775,6 +10951,11 @@ Similar to svn_ra_callbacks2_t, except that the progress
*
* @deprecated Provided for backward compatibility with the 1.2 API.
+
+
+Working copy file content fetching function.
+ * @since New in 1.8.
+
Client string customization callback function
@@ -10060,6 +11241,15 @@ A function type which allows the RA layer to ask about any
A function type for retrieving the youngest revision from a repos.
+
+
+This is a function type which allows the RA layer to fetch the
+ * cached pristine file contents whose checksum is @a checksum, if
+ * any. @a *contents will be a read stream containing those contents
+ * if they are found; NULL otherwise.
+ *
+ * @since New in 1.8.
+
This is a function type which allows the RA layer to invalidate
@@ -10130,8 +11320,9 @@ Return the appropriate @c svn_mergeinfo_inheritance_t for @a word.
-Mergeinfo on target's nearest (path-wise, not history-wise)
- ancestor, regardless of whether target has explicit mergeinfo.
+Mergeinfo inherited from a target's nearest (path-wise, not
+ history-wise) ancestor, regardless of whether target has explicit
+ mergeinfo.
Explicit mergeinfo, or if that doesn't exist, the inherited
@@ -10251,7 +11442,7 @@ Find the intersection of two rangelists consisting of @c
* @a consider_inheritance determines how to account for the inheritability
* of the two rangelist's ranges when calculating the intersection,
* @see svn_mergeinfo_diff(). If @a consider_inheritance is FALSE then
- * ranges with different inheritance can intersect, but the the resulting
+ * ranges with different inheritance can intersect, but the resulting
* @a *rangelist is non-inheritable only if the corresponding ranges from
* both @a rangelist1 and @a rangelist2 are non-inheritable.
* If @a consider_inheritance is TRUE, then ranges with different
@@ -10298,20 +11489,40 @@ Removes @a eraser (the subtrahend) from @a whiteboard (the
+Like svn_rangelist_merge2(), but with @a rangelist as an input/output
+ * argument. This function always allocates a new rangelist in @a pool and
+ * returns its result in @a *rangelist. It does not modify @a *rangelist
+ * in place. If not used carefully, this function can use up a lot of memory
+ * if called in a loop.
+ *
+ * It performs an extra adjacent range compaction round to make sure non
+ * collapsed input ranges are compacted in the result.
+ *
+ * @since New in 1.5.
+ * @deprecated Provided for backward compatibility with the 1.7 API.
+
+
+
Merge two rangelists consisting of @c svn_merge_range_t *
- * elements, @a *rangelist and @a changes, placing the results in
- * @a *rangelist. Either rangelist may be empty.
+ * elements, @a rangelist and @a changes, placing the results in
+ * @a rangelist. New elements added to @a rangelist are allocated
+ * in @a result_pool. Either rangelist may be empty.
*
* When intersecting rangelists are merged, the inheritability of
* the resulting svn_merge_range_t depends on the inheritability of the
* operands: see svn_mergeinfo_merge().
*
- * Note: @a *rangelist and @a changes must be sorted as said by @c
- * svn_sort_compare_ranges(). @a *rangelist is guaranteed to remain
+ * Note: @a rangelist and @a changes must be sorted as said by @c
+ * svn_sort_compare_ranges(). @a rangelist is guaranteed to remain
* in sorted order and be compacted to the minimal number of ranges
* needed to represent the merged result.
*
- * @since New in 1.5.
+ * If the original rangelist contains non-collapsed adjacent ranges,
+ * the final result is not guaranteed to be compacted either.
+ *
+ * Use @a scratch_pool for temporary allocations.
+ *
+ * @since New in 1.8.
@@ -10358,9 +11569,19 @@ Combine one mergeinfo catalog, @a changes_catalog, into another mergeinfo
+Like svn_mergeinfo_merge2, but uses only one pool.
+ *
+ * @deprecated Provided for backward compatibility with the 1.5 API.
+
+
+
Merge a shallow copy of one mergeinfo, @a changes, into another mergeinfo
* @a mergeinfo.
*
+ * Rangelists for merge source paths common to @a changes and @a mergeinfo may
+ * result in new rangelists; these are allocated in @a result_pool.
+ * Temporary allocations are made in @a scratch_pool.
+ *
* When intersecting rangelists for a path are merged, the inheritability of
* the resulting svn_merge_range_t depends on the inheritability of the
* operands. If two non-inheritable ranges are merged the result is always
@@ -10369,13 +11590,22 @@ Merge a shallow copy of one mergeinfo, @a changes, into another mergeinfo
* e.g. '/A: 1,3-4' merged with '/A: 1,3,4*,5' --> '/A: 1,3-5'
* '/A: 1,3-4*' merged with '/A: 1,3,4*,5' --> '/A: 1,3,4*,5'
*
- * @since New in 1.5.
+ * @since New in 1.8.
+Similar to svn_mergeinfo_diff2(), but users only one pool.
+ *
+ * @deprecated Provided for backward compatibility with the 1.7 API.
+ * @since New in 1.5.
+
+
+
Calculate the delta between two mergeinfos, @a mergefrom and @a mergeto
- * (which may be @c NULL), and place the result in @a *deleted and @a
- * *added (neither output argument may be @c NULL).
+ * (either or both of which may be @c NULL meaning an empty mergeinfo).
+ * Place the result in @a *deleted and @a *added (neither output argument
+ * may be @c NULL), both allocated in @a result_pool. The resulting
+ * @a *deleted and @a *added will not be null.
*
* @a consider_inheritance determines how the rangelists in the two
* hashes are compared for equality. If @a consider_inheritance is FALSE,
@@ -10392,7 +11622,7 @@ Calculate the delta between two mergeinfos, @a mergefrom and @a mergeto
* '/trunk: 1,3-4*,5' == '/trunk: 1,3-4*,5'
* '/trunk: 1,3-4,5' == '/trunk: 1,3-4,5'
*
- * @since New in 1.5.
+ * @since New in 1.8.
@@ -10416,7 +11646,7 @@ Parse the mergeinfo from @a input into @a *mergeinfo. If no
* @since New in 1.5.
-
+
@copyright
====================================================================
Licensed to the Apache Software Foundation (ASF) under one
@@ -10520,13 +11750,13 @@ Parse the mergeinfo from @a input into @a *mergeinfo. If no
Note that an @c svn_string(buf)_t may contain binary data,
which means that strlen(s->data) does not have to equal @c
- s->len. The NULL terminator is provided to make it easier to
+ s->len. The null terminator is provided to make it easier to
pass @c s->data to C string interfaces.
2. Non-NULL input:
- All the functions assume their input data is non-NULL,
+ All the functions assume their input data pointer is non-NULL,
unless otherwise documented, and may seg fault if passed
NULL. The input data may *contain* null bytes, of course, just
the data pointer itself must not be NULL.
@@ -10604,8 +11834,8 @@ Terminology for data structures that contain mergeinfo.
*
* (a) Strings (@c svn_string_t *) containing "unparsed mergeinfo".
*
- * (b) A "rangelist". An array (@c apr_array_header_t *) of non-overlapping
- * merge ranges (@c svn_merge_range_t *), sorted as said by
+ * (b) @c svn_rangelist_t, called a "rangelist". An array of non-
+ * overlapping merge ranges (@c svn_merge_range_t *), sorted as said by
* @c svn_sort_compare_ranges(). An empty range list is represented by
* an empty array. Unless specifically noted otherwise, all APIs require
* rangelists that describe only forward ranges, i.e. the range's start
@@ -10802,7 +12032,8 @@ Set @a *providers to an array of svn_auth_provider_object_t *
* 1. gnome-keyring
* 2. kwallet
* 3. keychain
- * 4. windows-cryptoapi
+ * 4. gpg-agent
+ * 5. windows-cryptoapi
*
* @since New in 1.6.
@@ -10882,6 +12113,24 @@ Set @a *provider to an authentication provider of type
*
* @since New in 1.4.
+
+
+Forget a set (or all) memory-cached credentials.
+ *
+ * Remove references (if any) in @a auth_baton to credentials cached
+ * therein. If @a cred_kind and @a realmstring are non-NULL, forget
+ * only the credentials associated with those credential types and
+ * realm. Otherwise @a cred_kind and @a realmstring must both be
+ * NULL, and this function will forget all credentials cached within
+ * @a auth_baton.
+ *
+ * @note This function does not affect persisted authentication
+ * credential storage at all. It is merely a way to cause Subversion
+ * to forget about credentials already fetched from a provider,
+ * forcing them to be fetched again later should they be required.
+ *
+ * @since New in 1.8.
+
Save a set of credentials.
@@ -10915,10 +12164,10 @@ Universal run-time parameters, made available to all providers.
hash.
The auth-hash prefix indicating that the parameter is global.
@name Default credentials defines
-Any 'default' credentials that came in through the application itself,
-(e.g. --username and --password options). Property values are
-const char *.
+Property values are const char *.
@{
+Default username provided by the application itself (e.g. --username)
+Default password provided by the application itself (e.g. --password)
@}
@brief The application doesn't want any providers to prompt
* users. Property value is irrelevant; only property's existence
@@ -10928,13 +12177,19 @@ const char *.
* matters.
@brief Indicates whether providers may save passwords to disk in
* plaintext. Property value can be either SVN_CONFIG_TRUE,
- * SVN_CONFIG_FALSE, or SVN_CONFIG_ASK.
+ * SVN_CONFIG_FALSE, or SVN_CONFIG_ASK.
+ * @since New in 1.6.
+
@brief The application doesn't want any providers to save passphrase
* to disk. Property value is irrelevant; only property's existence
- * matters.
+ * matters.
+ * @since New in 1.6.
+
@brief Indicates whether providers may save passphrase to disk in
* plaintext. Property value can be either SVN_CONFIG_TRUE,
- * SVN_CONFIG_FALSE, or SVN_CONFIG_ASK.
+ * SVN_CONFIG_FALSE, or SVN_CONFIG_ASK.
+ * @since New in 1.6.
+
@brief The application doesn't want any providers to save credentials
* to disk. Property value is irrelevant; only property's existence
* matters.
@@ -10943,7 +12198,10 @@ const char *.
* detected by the certificate validator.
@brief The following property is for SSL server cert providers. This
* provides the cert info (svn_auth_ssl_server_cert_info_t).
-Some providers need access to the @c svn_config_t configuration.
+This provides a pointer to a @c svn_config_t containting the config
+ * category.
+This provides a pointer to a @c svn_config_t containting the servers
+ * category.
@deprecated Provided for backward compatibility with the 1.5 API.
The current server group.
@brief A configuration directory that overrides the default
@@ -11055,8 +12313,8 @@ Certificate is not yet valid.
Certificate has expired.
Certificate's CN (hostname) does not match the remote hostname.
@brief Certificate authority is unknown (i.e. not trusted)
-@brief Other failure. This can happen if neon has introduced a new
- * failure bit that we do not handle yet.
+@brief Other failure. This can happen if an unknown failure occurs
+ * that we do not handle yet.
@}
Set @a *cred by prompting the user, allocating @a *cred in @a pool.
* @a baton is an implementation-specific closure.
@@ -11374,6 +12632,20 @@ Overview of the svn authentication system.
* @{
The type of a Subversion authentication object
+
+
+Create a deep copy of the config hash @a src_hash and return
+ * it in @a cfg_hash, allocating the memory in @a pool.
+ *
+ * @since New in 1.8.
+
+
+
+Create a deep copy of the config object @a src and return
+ * it in @a cfgp, allocating the memory in @a pool.
+ *
+ * @since New in 1.8.
+
Put the absolute path to the user's configuration directory,
@@ -11394,6 +12666,58 @@ Put the absolute path to the user's configuration directory,
*
* @since New in 1.6.
+
+
+Call @a walk_func with @a walk_baton and information describing
+ * each credential cached within the Subversion auth store located
+ * under @a config_dir. If the callback sets its delete_cred return
+ * flag, delete the associated credential.
+ *
+ * If @a config_dir is not NULL, it must point to an alternative
+ * config directory location. If it is NULL, the default location
+ * is used.
+ *
+ * @note @a config_dir may only be NULL in 1.8.2 and later.
+ *
+ * @note Removing credentials from the config-based disk store will
+ * not purge them from any open svn_auth_baton_t instance. Consider
+ * using svn_auth_forget_credentials() -- from the @a cleanup_func,
+ * even -- for this purpose.
+ *
+ * @note Removing credentials from the config-based disk store will
+ * not also remove any related credentials from third-party password
+ * stores. (Implementations of @a walk_func which delete credentials
+ * may wish to consult the "passtype" element of @a hash, if any, to
+ * see if a third-party store -- such as "gnome-keyring" or "kwallet"
+ * is being used to hold the most sensitive portion of the credentials
+ * for this @a cred_kind and @a realmstring.)
+ *
+ * @see svn_auth_forget_credentials()
+ *
+ * @since New in 1.8.
+
+
+
+Callback for svn_config_walk_auth_data().
+ *
+ * Called for each credential walked by that function (and able to be
+ * fully purged) to allow perusal and selective removal of credentials.
+ *
+ * @a cred_kind and @a realmstring specify the key of the credential.
+ * @a hash contains the hash data associated with the record.
+ *
+ * Before returning set @a *delete_cred to TRUE to remove the credential from
+ * the cache; leave @a *delete_cred unchanged or set it to FALSE to keep the
+ * credential.
+ *
+ * Implementations may return #SVN_ERR_CEASE_INVOCATION to indicate
+ * that the callback should not be called again. Note that when that
+ * error is returned, the value of @a delete_cred will still be
+ * honored and action taken if necessary. (For other returned errors,
+ * @a delete_cred is ignored by svn_config_walk_auth_data().)
+ *
+ * @since New in 1.8.
+
Use @a cred_kind and @a realmstring to create or overwrite a file
@@ -11574,6 +12898,21 @@ Similar to @c svn_config_section_enumerator2_t, but is not
*
* @deprecated Provided for backwards compatibility with the 1.2 API.
+
+
+Like svn_config_get_bool(), but for tristate values.
+ *
+ * Set @a *valuep to #svn_tristate_true, #svn_tristate_false, or
+ * #svn_tristate_unknown, depending on the value of @a option in @a
+ * section of @a cfg. True and false values are the same as for
+ * svn_config_get_bool(); @a unknown_value specifies the option value
+ * allowed for third state (#svn_tristate_unknown).
+ *
+ * Use @a default_value as the default value if @a option cannot be
+ * found.
+ *
+ * @since New in 1.8.
+
Like svn_config_get(), but only for yes/no/ask values.
@@ -11592,6 +12931,26 @@ Like svn_config_get(), but only for yes/no/ask values.
*
* @since New in 1.6.
+
+
+Like svn_config_set(), but for 64-bit signed integers.
+ *
+ * Sets the value of @a option in @a section of @a cfg to the signed
+ * decimal @a value.
+ *
+ * @since New in 1.8.
+
+
+
+Like svn_config_get(), but for 64-bit signed integers.
+ *
+ * Parses the @a option in @a section of @a cfg as an integer value,
+ * setting @a *valuep to the result. If the option is not found, sets
+ * @a *valuep to @a default_value. If the option is found but cannot
+ * be converted to an integer, returns an error.
+ *
+ * @since New in 1.8.
+
Like svn_config_set(), but for boolean values.
@@ -11638,35 +12997,70 @@ Like svn_config_read(), but merges the configuration data from @a file
* expansions in @a cfg, so that the next svn_config_get() takes the
* modifications into account.
+
+
+Read configuration data from @a stream into @a *cfgp, allocated in
+ * @a result_pool.
+ *
+ * If @a section_names_case_sensitive is @c TRUE, populate section name hashes
+ * case sensitively, except for the @c "DEFAULT" section.
+ *
+ * If @a option_names_case_sensitive is @c TRUE, populate option name hashes
+ * case sensitively.
+ *
+ * @since New in 1.8.
+
-Similar to svn_config_read2, but always passes FALSE to
- * section_names_case_sensitive.
+Similar to svn_config_read2, but always passes @c FALSE to
+ * @a section_names_case_sensitive.
*
* @deprecated Provided for backward compatibility with 1.6 API.
+Similar to svn_config_read3, but always passes @c FALSE to
+ * @a option_names_case_sensitive.
+ *
+ * @since New in 1.7.
+ * @deprecated Provided for backward compatibility with 1.7 API.
+
+
+
Read configuration data from @a file (a file or registry path) into
* @a *cfgp, allocated in @a pool.
*
* If @a file does not exist, then if @a must_exist, return an error,
* otherwise return an empty @c svn_config_t.
*
- * If @a section_names_case_sensitive is TRUE, populate section name hashes
- * case sensitively, except for the default SVN_CONFIG__DEFAULT_SECTION.
+ * If @a section_names_case_sensitive is @c TRUE, populate section name hashes
+ * case sensitively, except for the @c "DEFAULT" section.
*
- * @since New in 1.7.
+ * If @a option_names_case_sensitive is @c TRUE, populate option name hashes
+ * case sensitively.
+ *
+ * @since New in 1.8.
+Similar to svn_config_create2, but always passes @c FALSE to
+ * @a option_names_case_sensitive.
+ *
+ * @since New in 1.7.
+ * @deprecated Provided for backward compatibility with 1.7 API.
+
+
+
Set @a *cfgp to an empty @c svn_config_t structure,
* allocated in @a result_pool.
*
* Pass TRUE to @a section_names_case_sensitive if
* section names are to be populated case sensitively.
*
- * @since New in 1.7.
+ * Pass TRUE to @a option_names_case_sensitive if
+ * option names are to be populated case sensitively.
+ *
+ * @since New in 1.8.
@@ -11675,14 +13069,23 @@ Strings for the names of files, sections, and options in the
client configuration files.
@{
+@since New in 1.8.
+@since New in 1.8.
+@since New in 1.8.
@since New in 1.7.
+@deprecated Not used by Subversion since 2003/r847039 (well before 1.0)
+@since New in 1.8.
+@since New in 1.8.
+@since New in 1.8.
@}
@name Repository conf directory configuration files strings
* Strings for the names of sections and options in the
* repository conf directory configuration files.
* @{
+@since New in 1.8.
@since New in 1.7.
+@since New in 1.8.
@}
Read configuration information from the standard sources and merge it
* into the hash @a *cfg_hash. If @a config_dir is not NULL it specifies a
@@ -11803,13 +13206,13 @@ Read configuration information from the standard sources and merge it
Note that an @c svn_string(buf)_t may contain binary data,
which means that strlen(s->data) does not have to equal @c
- s->len. The NULL terminator is provided to make it easier to
+ s->len. The null terminator is provided to make it easier to
pass @c s->data to C string interfaces.
2. Non-NULL input:
- All the functions assume their input data is non-NULL,
+ All the functions assume their input data pointer is non-NULL,
unless otherwise documented, and may seg fault if passed
NULL. The input data may *contain* null bytes, of course, just
the data pointer itself must not be NULL.
@@ -11939,6 +13342,30 @@ Read configuration information from the standard sources and merge it
@file svn_types.h
@brief Subversion's data types
+ @copyright
+ ====================================================================
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ ====================================================================
+ @endcopyright
+
+ @file svn_io.h
+ @brief General file I/O for Subversion
+
Opaque structure describing a set of configuration options.
@@ -11955,6 +13382,12 @@ Opaque structure describing a set of configuration options.
+ Same as svn_opt_print_help4(), but with @a verbose always @c FALSE.
+
+ @deprecated Provided for backward compatibility with the 1.7 API.
+
+
+
Central dispatcher function for various kinds of help message.
Prints one of:
* subcommand-specific help (svn_opt_subcommand_help)
@@ -11971,7 +13404,8 @@ Opaque structure describing a set of configuration options.
Else, if @a print_version is TRUE, then print version info, in
brief form if @a quiet is also TRUE; if @a quiet is FALSE, then if
@a version_footer is non-NULL, print it following the version
- information.
+ information. If @a verbose is TRUE, also print information about
+ the running system and loaded shared libraries, where available.
Else, if @a os is not @c NULL and does not contain arguments, print
generic help, via svn_opt_print_generic_help2() with the @a header,
@@ -11986,7 +13420,7 @@ Opaque structure describing a set of configuration options.
--version flag *and* subcommand arguments on a help command line.
The logic for handling such a situation should be in one place.
- @since New in 1.5.
+ @since New in 1.8.
@@ -12533,16 +13967,33 @@ Return, in @a *handler2 and @a *handler2_baton a function/baton that
-Drive @a editor (with its @a edit_baton) in such a way that
- * each path in @a paths is traversed in a depth-first fashion. As
- * each path is hit as part of the editor drive, use @a
- * callback_func and @a callback_baton to allow the caller to handle
+Similar to svn_delta_path_driver2, but takes an (unused) revision,
+ * and will sort the provided @a paths using svn_sort_compare_paths.
+ *
+ * @note In versions prior to 1.8, this function would modify the order
+ * of elements in @a paths, despite the 'const' marker on the parameter.
+ * This has been fixed in 1.8.
+ *
+ * @deprecated Provided for backward compatibility with the 1.7 API.
+
+
+
+Drive @a editor (with its @a edit_baton) to visit each path in @a paths.
+ * As each path is hit as part of the editor drive, use
+ * @a callback_func and @a callback_baton to allow the caller to handle
* the portion of the editor drive related to that path.
*
- * Use @a revision as the revision number passed to intermediate
- * directory openings.
+ * Each path in @a paths is a (const char *) relpath, relative
+ * to the root path of the @a edit. The editor drive will be
+ * performed in the same order as @a paths. The paths should be sorted
+ * using something like svn_sort_compare_paths to ensure that a depth-first
+ * pattern is observed for directory/file baton creation. If @a sort_paths
+ * is set, the function will sort the paths for you. Some callers may need
+ * further customization of the order (ie. libsvn_delta/compat.c).
*
- * Use @a pool for all necessary allocations.
+ * Use @a scratch_pool for all necessary allocations.
+ *
+ * @since New in 1.8.
@@ -12555,7 +14006,8 @@ Path-based editor drives.
Callback function type for svn_delta_path_driver().
*
* The handler of this callback is given the callback baton @a
- * callback_baton, @a path, and the @a parent_baton which represents
+ * callback_baton, @a path which is a relpath relative to the
+ * root of the edit, and the @a parent_baton which represents
* path's parent directory as created by the editor passed to
* svn_delta_path_driver().
*
@@ -12661,8 +14113,9 @@ All delta processing is done. Call this, with the @a edit_baton for
In the directory represented by @a parent_baton, indicate that
* @a path is present as a file in the edit source, but cannot be
- * conveyed to the edit consumer (perhaps because of authorization
- * restrictions).
+ * cannot be conveyed to the edit consumer. Currently, this would
+ * only occur because of authorization restrictions, but may change
+ * in the future.
*
* Any temporary allocations may be performed in @a scratch_pool.
@@ -12721,8 +14174,8 @@ Apply a text delta, yielding the new revision of a file.
-We are going to make change to a file named @a path, which resides
- * in the directory identified by @a parent_baton.
+We are going to make changes to a file at @a path, a child of the
+ * directory represented by @a parent_baton.
*
* The callback can store a baton for this new file in @a **file_baton;
* whatever value it stores there should be passed through to
@@ -12738,7 +14191,8 @@ We are going to make change to a file named @a path, which resides
-We are going to add a new file named @a path. The callback can
+We are going to add a new file at @a path, a child of the
+ * directory represented by @a parent_baton. The callback can
* store a baton for this new file in @a **file_baton; whatever value
* it stores there should be passed through to @c apply_textdelta.
*
@@ -12764,8 +14218,9 @@ We are going to add a new file named @a path. The callback can
In the directory represented by @a parent_baton, indicate that
* @a path is present as a subdirectory in the edit source, but
- * cannot be conveyed to the edit consumer (perhaps because of
- * authorization restrictions).
+ * cannot be conveyed to the edit consumer. Currently, this would
+ * only occur because of authorization restrictions, but may change
+ * in the future.
*
* Any temporary allocations may be performed in @a scratch_pool.
@@ -12793,10 +14248,10 @@ Change the value of a directory's property.
-We are going to make changes in a subdirectory (of the directory
- * identified by @a parent_baton). The subdirectory is specified by
- * @a path. The callback must store a value in @a *child_baton that
- * should be used as the @a parent_baton for subsequent changes in this
+We are going to make changes in the subdirectory at @a path, a
+ * child of the directory represented by @a parent_baton.
+ * The callback must store a value in @a *child_baton that
+ * should be used as the parent baton for subsequent changes in this
* subdirectory. If a valid revnum, @a base_revision is the current
* revision of the subdirectory.
*
@@ -12806,9 +14261,10 @@ We are going to make changes in a subdirectory (of the directory
-We are going to add a new subdirectory named @a path. We will use
+We are going to add a new subdirectory at @a path, a child of
+ * the directory represented by @a parent_baton. We will use
* the value this callback stores in @a *child_baton as the
- * @a parent_baton for further changes in the new subdirectory.
+ * parent baton for further changes in the new subdirectory.
*
* If @a copyfrom_path is non-@c NULL, this add has history (i.e., is a
* copy), and the origin of the copy may be recorded as
@@ -12820,7 +14276,7 @@ We are going to add a new subdirectory named @a path. We will use
-Remove the directory entry named @a path, a child of the directory
+Remove the directory entry at @a path, a child of the directory
* represented by @a parent_baton. If @a revision is a valid
* revision number, it is used as a sanity check to ensure that you
* are really removing the revision of @a path that you think you are.
@@ -12951,10 +14407,12 @@ A structure full of callback functions the delta source will invoke
*
* Each of these takes a directory baton, indicating the directory
* in which the change takes place, and a @a path argument, giving the
- * path (relative to the root of the edit) of the file,
- * subdirectory, or directory entry to change. Editors will usually
- * want to join this relative path with some base stored in the edit
- * baton (e.g. a URL, a location in the OS filesystem).
+ * path of the file, subdirectory, or directory entry to change.
+ *
+ * The @a path argument to each of the callbacks is relative to the
+ * root of the edit. Editors will usually want to join this relative
+ * path with some base stored in the edit baton (e.g. a URL, or a
+ * location in the OS filesystem).
*
* Since every call requires a parent directory baton, including
* @c add_directory and @c open_directory, where do we ever get our
@@ -13091,8 +14549,9 @@ A structure full of callback functions the delta source will invoke
* number of operations later. As a result, an editor driver must not
* assume that an error from an editing function resulted from the
* particular operation being detected. Moreover, once an editing
- * function returns an error, the edit is dead; the only further
- * operation which may be called on the editor is abort_edit.
+ * function (including @c close_edit) returns an error, the edit is
+ * dead; the only further operation which may be called on the editor
+ * is @c abort_edit.
@@ -13152,6 +14611,15 @@ Prepare to apply a text delta. @a source is a readable generic stream
* @note To avoid lifetime issues, @a error_info is copied into
* @a pool or a subpool thereof.
+
+
+Send the @a contents of length @a len as a txdelta against an empty
+ * source directly to window-handler @a handler/@a handler_baton.
+ *
+ * All temporary allocation is performed in @a pool.
+ *
+ * @since New in 1.8.
+
Send the contents of @a txstream to window-handler @a handler/@a baton.
@@ -13192,14 +14660,24 @@ Send the contents of @a string to window-handler @a handler/@a baton.
+Similar to svn_txdelta2 but always calculating the target checksum.
+ *
+ * @deprecated Provided for backward compatibility with the 1.7 API.
+
+
+
Set @a *stream to a pointer to a delta stream that will turn the byte
* string from @a source into the byte stream from @a target.
*
* @a source and @a target are both readable generic streams. When we call
* svn_txdelta_next_window() on @a *stream, it will read from @a source and
- * @a target to gather as much data as it needs.
+ * @a target to gather as much data as it needs. If @a calculate_checksum
+ * is set, you may call svn_txdelta_md5_digest() to get an MD5 checksum
+ * for @a target.
*
* Do any necessary allocation in a sub-pool of @a pool.
+ *
+ * @since New in 1.8.
@@ -13505,13 +14983,13 @@ Action code of delta instruction
Note that an @c svn_string(buf)_t may contain binary data,
which means that strlen(s->data) does not have to equal @c
- s->len. The NULL terminator is provided to make it easier to
+ s->len. The null terminator is provided to make it easier to
pass @c s->data to C string interfaces.
2. Non-NULL input:
- All the functions assume their input data is non-NULL,
+ All the functions assume their input data pointer is non-NULL,
unless otherwise documented, and may seg fault if passed
NULL. The input data may *contain* null bytes, of course, just
the data pointer itself must not be NULL.
@@ -13588,6 +15066,29 @@ This is the default compression level we pass to zlib. It
@since New in 1.1.
+
+
+Read a line of text from a file, up to a specified length.
+ *
+ * Allocate @a *stringbuf in @a result_pool, and read into it one line
+ * from @a file. Reading stops either after a line-terminator was found
+ * or after @a max_len bytes have been read.
+ *
+ * If end-of-file is reached or @a max_len bytes have been read, and @a eof
+ * is not NULL, then set @a *eof to @c TRUE.
+ *
+ * The line-terminator is not stored in @a *stringbuf.
+ * The line-terminator is detected automatically and stored in @a *eol
+ * if @a eol is not NULL. If EOF is reached and @a file does not end
+ * with a newline character, and @a eol is not NULL, @ *eol is set to NULL.
+ *
+ * @a scratch_pool is used for temporary allocations.
+ *
+ * Hint: To read all data until a line-terminator is hit, pass APR_SIZE_MAX
+ * for @a max_len.
+ *
+ * @since New in 1.8.
+
Create (or overwrite) the file at @a path with new contents,
@@ -13739,7 +15240,8 @@ Wrapper for apr_file_getc().
Wrapper for apr_file_close().
-Wrapper for apr_file_open(). @a fname is utf8-encoded.
+Wrapper for apr_file_open(). @a fname is utf8-encoded.
+ Always passed flag | APR_BINARY to apr.
Examine up to @a len bytes of data in @a buf to determine if the
@@ -13890,6 +15392,13 @@ Run a command to completion, by first calling svn_io_start_cmd() and
+ Similar to svn_io_start_cmd3() but with @a env always set to NULL.
+
+ @deprecated Provided for backward compatibility with the 1.7 API
+ @since New in 1.7.
+
+
+
Start @a cmd with @a args, using utf8-encoded @a path as working
directory. Return the process handle for the invoked program in @a
*cmd_proc.
@@ -13909,14 +15418,21 @@ Run a command to completion, by first calling svn_io_start_cmd() and
If @a inherit is TRUE, the invoked program inherits its environment from
the caller and @a cmd, if not absolute, is searched for in PATH.
- Otherwise, the invoked program runs with an empty environment and @a cmd
- must be an absolute path.
+
+ If @a inherit is FALSE @a cmd must be an absolute path and the invoked
+ program inherits the environment defined by @a env or runs with an empty
+ environment in @a env is NULL.
@note On some platforms, failure to execute @a cmd in the child process
will result in error output being written to @a errfile, if non-NULL, and
a non-zero exit status being returned to the parent process.
- @since New in 1.7.
+ @note An APR bug affects Windows: passing a NULL @a env does not
+ guarantee the invoked program to run with an empty environment when
+ @a inherits is FALSE, the program may inherit its parent's environment.
+ Explicitly pass an empty @a env to get an empty environment.
+
+ @since New in 1.8.
@@ -13952,13 +15468,27 @@ Recursively walk the directory rooted at @a dirname, a
Callback function type for svn_io_dir_walk()
+Similar to svn_io_stat_dirent2, but always passes FALSE for
+ * verify_truename.
+ *
+ * @since New in 1.7.
+ * @deprecated Provided for backwards compatibility with the 1.7 API.
+
+
+
Create a svn_io_dirent2_t instance for path. Specialized variant of
* svn_io_stat() that directly translates node_kind and special.
*
+ * If @a verify_truename is @c TRUE, an additional check is performed to
+ * verify the truename of the last path component on case insensitive
+ * filesystems. This check is expensive compared to a just a stat,
+ * but certainly cheaper than a full truename calculation using
+ * apr_filepath_merge() which verifies all path components.
+ *
* If @a ignore_enoent is set to @c TRUE, set *dirent_p->kind to
* svn_node_none instead of returning an error.
*
- * @since New in 1.7.
+ * @since New in 1.8.
@@ -14075,6 +15605,38 @@ Set @a *result to a string containing the contents of @a
*
* @since New in 1.5.
+
+
+Return a generic stream which wraps another primary stream,
+ * delaying the "opening" of that stream until the first time the
+ * returned stream is accessed.
+ *
+ * @a open_func and @a open_baton are a callback function/baton pair
+ * which will be invoked upon the first access of the returned
+ * stream (read, write, mark, seek, skip, or possibly close). The
+ * callback shall open the primary stream.
+ *
+ * If the only "access" the returned stream gets is to close it
+ * then @a open_func will only be called if @a open_on_close is TRUE.
+ *
+ * @since New in 1.8.
+
+
+
+A function type provided for use as a callback from
+ * @c svn_stream_lazyopen_create().
+ *
+ * The callback function shall open a new stream and set @a *stream to
+ * the stream object, allocated in @a result_pool. @a baton is the
+ * callback baton that was passed to svn_stream_lazyopen_create().
+ *
+ * @a result_pool is the result pool that was passed to
+ * svn_stream_lazyopen_create(). The callback function may use
+ * @a scratch_pool for temporary allocations; the caller may clear or
+ * destroy @a scratch_pool any time after the function returns.
+ *
+ * @since New in 1.8.
+
Read the contents of @a stream into memory, returning the data in
@@ -14164,6 +15726,13 @@ Write to @a stream using a printf-style @a fmt specifier, passed through
Write to @a stream using a printf-style @a fmt specifier, passed through
* apr_psprintf() using memory from @a pool.
+
+
+Write NULL-terminated string @a str to @a stream.
+ *
+ * @since New in 1.8.
+ *
+
Return a writable stream which, when written to, writes to both of the
@@ -14205,9 +15774,9 @@ Returns @c TRUE if the generic @a stream supports svn_stream_mark().
-Reset a generic stream back to its origin. E.g. On a file this would be
+Reset a generic stream back to its origin. (E.g. On a file this would be
* implemented as a seek to position 0). This function returns a
- * #SVN_ERR_STREAM_RESET_NOT_SUPPORTED error when the stream doesn't
+ * #SVN_ERR_STREAM_SEEK_NOT_SUPPORTED error when the stream doesn't
* implement resetting.
*
* @since New in 1.7.
@@ -14277,6 +15846,15 @@ Return a stream that decompresses all data read and compresses all
*
* @note From 1.4, compression support is always compiled in.
+
+
+Return a generic stream which implements buffered reads and writes.
+ * The stream will preferentially store data in-memory, but may use
+ * disk storage as backup if the amount of data is large.
+ * Allocate the stream in @a result_pool
+ *
+ * @since New in 1.8.
+
Return a generic read-only stream connected to string @a str.
@@ -14512,6 +16090,30 @@ Copy the file whose basename (or relative path) is @a file within
@since New in 1.1.
+
+
+ Unlock the file @a lockfile_handle.
+
+ Use @a pool for memory allocations. @a pool must be the pool that
+ was passed to svn_io_lock_open_file().
+
+ @since New in 1.8.
+
+
+
+ Lock the file @a lockfile_handle. If @a exclusive is TRUE,
+ obtain exclusive lock, otherwise obtain shared lock.
+
+ If @a nonblocking is TRUE, do not wait for the lock if it
+ is not available: throw an error instead.
+
+ Lock will be automatically released when @a pool is cleared or destroyed.
+ You may also explicitly call svn_io_unlock_open_file().
+ Use @a pool for memory allocations. @a pool must be the pool that
+ @a lockfile_handle has been created in or one of its sub-pools.
+
+ @since New in 1.8.
+
Lock file at @a lock_file. If @a exclusive is TRUE,
@@ -14540,6 +16142,16 @@ Create file at utf8-encoded @a file with contents @a contents.
* @a file must not already exist.
* Use @a pool for memory allocations.
+
+
+Set @a *same12 to TRUE if @a file1 and @a file2 have the same
+ * contents, else set it to FALSE. Do the similar for @a *same23
+ * with @a file2 and @a file3, and @a *same13 for @a file1 and @a
+ * file3. The filenames @a file1, @a file2 and @a file3 are
+ * utf8-encoded. Use @a scratch_pool for temporary allocations.
+ *
+ * @since New in 1.8.
+
Set @a *same to TRUE if @a file1 and @a file2 have the same
@@ -14560,16 +16172,31 @@ Return in @a *checksum the checksum of type @a kind of @a file
*
* @since New in 1.6.
+
+
+Set @a *different_p12 to non-zero if @a file1 and @a file2 have different
+ * sizes, else set to zero. Do the similar for @a *different_p23 with
+ * @a file2 and @a file3, and @a *different_p13 for @a file1 and @a file3.
+ * The filenames @a file1, @a file2 and @a file3 are utf8-encoded.
+ *
+ * Setting @a *different_p12 to zero does not mean the files definitely
+ * have the same size, it merely means that the sizes are not
+ * definitely different. That is, if the size of one or both files
+ * cannot be determined (due to stat() returning an error), then the sizes
+ * are not known to be different, so @a *different_p12 is set to 0.
+ *
+ * @since New in 1.8.
+
-Set @a *different_p to non-zero if @a file1 and @a file2 have different
- * sizes, else set to zero. Both @a file1 and @a file2 are utf8-encoded.
+Set @a *different_p to TRUE if @a file1 and @a file2 have different
+ * sizes, else set to FALSE. Both @a file1 and @a file2 are utf8-encoded.
*
* Setting @a *different_p to zero does not mean the files definitely
* have the same size, it merely means that the sizes are not
* definitely different. That is, if the size of one or both files
* cannot be determined, then the sizes are not known to be different,
- * so @a *different_p is set to 0.
+ * so @a *different_p is set to FALSE.
@@ -14801,7 +16428,7 @@ Like svn_io_open_uniquely_named(), but takes a joined dirpath and
Create a writable file, with an arbitrary and unique name, in the
* directory @a dirpath. Set @a *temp_path to its full path, and set
* @a *file to the file handle, both allocated from @a result_pool. Either
- * @a file or @a unique_name may be @c NULL. If @a file is @c NULL, the file
+ * @a file or @a temp_path may be @c NULL. If @a file is @c NULL, the file
* will be created but not open.
*
* If @a dirpath is @c NULL, use the path returned from svn_io_temp_dir().
@@ -14923,12 +16550,6 @@ Remove when the file is closed
No deletion ever
-
-
- Internal function for creating a checksum from a binary digest.
-
- @since New in 1.6
-
Return an error of type #SVN_ERR_CHECKSUM_MISMATCH for @a actual and
@@ -14943,6 +16564,13 @@ No deletion ever
@since New in 1.7.
+
+
+ Return @c TRUE iff @a checksum matches the checksum for the empty
+ string.
+
+ @since New in 1.8.
+
Return the digest size of @a checksum.
@@ -15030,7 +16658,8 @@ Return the hex representation of @a checksum, allocating the string
- Return a deep copy of @a checksum, allocated in @a pool.
+ Return a deep copy of @a checksum, allocated in @a pool. If @a
+ checksum is NULL then NULL is returned.
@since New in 1.6.
@@ -15221,13 +16850,13 @@ The bytes of the checksum.
Note that an @c svn_string(buf)_t may contain binary data,
which means that strlen(s->data) does not have to equal @c
- s->len. The NULL terminator is provided to make it easier to
+ s->len. The null terminator is provided to make it easier to
pass @c s->data to C string interfaces.
2. Non-NULL input:
- All the functions assume their input data is non-NULL,
+ All the functions assume their input data pointer is non-NULL,
unless otherwise documented, and may seg fault if passed
NULL. The input data may *contain* null bytes, of course, just
the data pointer itself must not be NULL.
@@ -15372,6 +17001,18 @@ The checksum is (or should be set to) an MD5 checksum.
@since New in 1.2.
+
+
+ Get the next token from @a *str interpreting any char from @a sep as a
+ token separator. Separators at the beginning of @a str will be skipped.
+ Returns a pointer to the beginning of the first token in @a *str or NULL
+ if no token is left. Modifies @a str such that the next call will return
+ the next token.
+
+ @note The content of @a *str may be modified by this function.
+
+ @since New in 1.8.
+
Return @c TRUE iff @a str exactly matches any of the elements of @a list.
@@ -15429,15 +17070,52 @@ Return @c TRUE iff @a str1 and @a str2 have identical length and data.
Return a duplicate of @a original_string.
+
+
+Replace in @a str the substring which starts at @a pos and is @a
+ * old_count bytes long with a new substring @a bytes (which is @a
+ * new_count bytes long).
+ *
+ * This is faster but functionally equivalent to the following sequence:
+ * @code
+ svn_stringbuf_remove(str, pos, old_count);
+ svn_stringbuf_insert(str, pos, bytes, new_count);
+ * @endcode
+ *
+ * @since New in 1.8.
+
+
+
+Removes @a count bytes from @a str, starting at position @a pos.
+ * If that range exceeds the current string data, @a str gets truncated
+ * at @a pos. If the latter is larger or equal to @c str->pos, this will
+ * be a no-op. Otherwise, the resulting string will be @c str->len-count
+ * bytes long.
+ *
+ * @since New in 1.8.
+
+
+
+Read @a count bytes from @a bytes and insert them into @a str at
+ * position @a pos and following. The resulting string will be
+ * @c count+str->len bytes long. If @c pos is larger or equal to the
+ * number of bytes currently used in @a str, simply append @a bytes.
+ *
+ * Reallocs if necessary. @a str is affected, nothing else is.
+ *
+ * @note The inserted string may be a sub-range if @a str.
+ *
+ * @since New in 1.8.
+
-Append a C string onto @a targetstr.
+Append the C string @a cstr onto @a targetstr.
*
* reallocs if necessary. @a targetstr is affected, nothing else is.
-Append an @c svn_stringbuf_t onto @a targetstr.
+Append the stringbuf @c appendstr onto @a targetstr.
*
* reallocs if necessary. @a targetstr is affected, nothing else is.
@@ -15449,7 +17127,8 @@ Append an array of bytes onto @a targetstr.
-Append a single character @a byte onto @a targetstr.
+Append the single character @a byte onto @a targetstr.
+ *
* This is an optimized version of svn_stringbuf_appendbytes()
* that is much faster to call and execute. Gains vary with the ABI.
* The advantages extend beyond the actual call because the reduced
@@ -15460,53 +17139,68 @@ Append a single character @a byte onto @a targetstr.
-Fill bytestring @a str with character @a c.
+Fill @a str with character @a c.
Chop @a nbytes bytes off end of @a str, but not more than @a str->len.
-Return @c TRUE if a bytestring is empty (has length zero).
+Return @c TRUE if @a str is empty (has length zero).
-Set a bytestring @a str to empty (0 length).
+Set @a str to empty (zero length).
-Set a bytestring @a str to @a value
+Set @a str to a copy of the null-terminated C string @a value.
-Make sure that the string @a str has at least @a minimum_size bytes of
- * space available in the memory block.
+Make sure that @a str has at least @a minimum_size
+ * bytes of space available in the memory block.
*
- * (@a minimum_size should include space for the terminating NULL character.)
+ * The allocated string buffer will be at least one byte larger than
+ * @a minimum_size to account for a final '\\0'.
+ *
+ * @note: Before Subversion 1.8 this function did not ensure space for
+ * one byte more than @a minimum_size. If compatibility with pre-1.8
+ * behaviour is required callers must assume space for only
+ * @a minimum_size-1 data bytes plus a final '\\0'.
-Create a new bytestring by formatting @a cstring (NULL-terminated)
- * from a @c va_list (see svn_stringbuf_createf()).
+Create a new stringbuf by printf-style formatting using @c fmt and @a ap.
+ * This is the same as svn_stringbuf_createf() except for the different
+ * way of passing the variable arguments.
-Create a new bytestring by formatting @a cstring (NULL-terminated)
- * from varargs, which are as appropriate for apr_psprintf().
+Create a new stringbuf by printf-style formatting using @a fmt and the
+ * variable arguments, which are as appropriate for apr_psprintf().
-Create a new stringbuf with the contents of the given string
+Create a new stringbuf copied from the string @a str.
+
-Create a new empty bytestring with at least @a minimum_size bytes of
+Create a new, empty stringbuf with at least @a minimum_size bytes of
* space available in the memory block.
*
- * The allocated string buffer will be one byte larger than @a minimum_size
- * to account for a final '\\0'.
+ * The allocated string buffer will be at least one byte larger than
+ * @a minimum_size to account for a final '\\0'.
*
* @since New in 1.6.
+
+
+Create a new, empty stringbuf.
+ *
+ * @since New in 1.8.
+
-Create a new bytestring containing a generic string of bytes
- * (NON-NULL-terminated)
+Create a new stringbuf copied from the generic string of bytes, @a bytes,
+ * of length @a size bytes. @a bytes is NOT assumed to be null-terminated,
+ * but the new stringbuf will be.
@@ -15514,7 +17208,9 @@ Create a new bytestring containing a generic string of bytes
@defgroup svn_string_svn_stringbuf_t svn_stringbuf_t functions
@{
-Create a new bytestring containing a C string (NULL-terminated).
+Create a new stringbuf copied from the null-terminated C string
+ * @a cstring.
+
Return position of last occurrence of @a ch in @a str, or return
@@ -15533,30 +17229,41 @@ Return @c TRUE iff @a str1 and @a str2 have identical length and data.
Return a duplicate of @a original_string.
-Return TRUE if a bytestring is empty (has length zero).
+Return TRUE if @a str is empty (has length zero).
-Create a new bytestring by formatting @a cstring (NULL-terminated)
- * from a @c va_list (see svn_stringbuf_createf()).
+Create a new string by printf-style formatting using @c fmt and @a ap.
+ * This is the same as svn_string_createf() except for the different
+ * way of passing the variable arguments.
-Create a new bytestring by formatting @a cstring (NULL-terminated)
- * from varargs, which are as appropriate for apr_psprintf().
+Create a new string by printf-style formatting using @a fmt and the
+ * variable arguments, which are as appropriate for apr_psprintf().
-Create a new string with the contents of the given stringbuf
+Create a new string copied from the stringbuf @a strbuf.
+
-Create a new bytestring containing a generic string of bytes
- * (NOT NULL-terminated)
+Create a new string copied from a generic string of bytes, @a bytes, of
+ * length @a size bytes. @a bytes is NOT assumed to be null-terminated, but
+ * the new string will be.
+
+
+
+Create a new, empty string.
+ *
+ * @since New in 1.8.
+
@defgroup svn_string_svn_string_t svn_string_t functions
@{
-Create a new bytestring containing a C string (NULL-terminated).
+Create a new string copied from the null-terminated C string @a cstring.
+
total size of buffer allocated
@@ -15633,13 +17340,13 @@ A buffered string, capable of appending without an allocation and copy
Note that an @c svn_string(buf)_t may contain binary data,
which means that strlen(s->data) does not have to equal @c
- s->len. The NULL terminator is provided to make it easier to
+ s->len. The null terminator is provided to make it easier to
pass @c s->data to C string interfaces.
2. Non-NULL input:
- All the functions assume their input data is non-NULL,
+ All the functions assume their input data pointer is non-NULL,
unless otherwise documented, and may seg fault if passed
NULL. The input data may *contain* null bytes, of course, just
the data pointer itself must not be NULL.
@@ -15762,7 +17469,7 @@ Error groups
@since New in 1.2.
-Evaluates to @c TRUE iff @a apr_err (of type #apr_status_t) is in the given
+Evaluates to @c TRUE iff @a apr_err (of type apr_status_t) is in the given
* @a category, which should be one of the @c SVN_ERR_*_CATEGORY_START
* constants.
*
@@ -15795,6 +17502,15 @@ Similar to SVN_ERR_MALFUNCTION(), but without the option of returning
*
* @since New in 1.6.
+Like SVN_ERR_ASSERT(), but append ERR to the returned error chain.
+ *
+ * If EXPR is false, return a malfunction error whose chain includes ERR.
+ * If EXPR is true, do nothing. (In particular, this does not clear ERR.)
+ *
+ * Types: (svn_boolean_t expr, svn_error_t *err)
+ *
+ * @since New in 1.8.
+
Check that a condition is true: if not, report an error and possibly
* terminate the program.
*
@@ -15813,6 +17529,8 @@ Check that a condition is true: if not, report an error and possibly
* evaluation of this expression is not compiled out in release-mode builds.
*
* @since New in 1.6.
+ *
+ * @see SVN_ERR_ASSERT_E()
Similar to SVN_ERR_ASSERT(), but without the option of returning
* an error to the calling function.
@@ -16033,6 +17751,33 @@ If @a err has a custom error message, return that, otherwise
* @note @a buf and @a bufsize are provided in the interface so that
* this function is thread-safe and yet does no allocation.
+
+
+ Return the symbolic name of an error code. If the error code
+ is in svn_error_codes.h, return the name of the macro as a string.
+ If the error number is not recognised, return @c NULL.
+
+ An error number may not be recognised because it was defined in a future
+ version of Subversion (e.g., a 1.9.x server may transmit a defined-in-1.9.0
+ error number to a 1.8.x client).
+
+ An error number may be recognised @em incorrectly if the @c apr_status_t
+ value originates in another library (such as libserf) which also uses APR.
+ (This is a theoretical concern only: the @c apr_err member of #svn_error_t
+ should never contain a "foreign" @c apr_status_t value, and
+ in any case Subversion and Serf use non-overlapping subsets of the
+ @c APR_OS_START_USERERR range.)
+
+ Support for error codes returned by APR itself (i.e., not in the
+ @c APR_OS_START_USERERR range, as defined in apr_errno.h) may be implemented
+ in the future.
+
+ @note In rare cases, a single numeric code has more than one symbolic name.
+ (For example, #SVN_ERR_WC_NOT_DIRECTORY and #SVN_ERR_WC_NOT_WORKING_COPY).
+ In those cases, it is not guaranteed which symbolic name is returned.
+
+ @since New in 1.8.
+
Put an English description of @a statcode into @a buf and return @a buf,
@@ -16142,12 +17887,12 @@ The absolute (sans leading slash) path for this segment. May be
The beginning (oldest) and ending (youngest) revisions for this
- segment.
+ segment, both inclusive.
@defgroup node_location_seg_reporting Node location segment reporting.
* @{
- A representation of a segment of a object's version history with an
+ A representation of a segment of an object's version history with an
emphasis on the object's location in the repository as of various
revisions.
@@ -16331,6 +18076,10 @@ Return a deep copy of @a log_entry, allocated in @a pool.
Whether @a revision should be interpreted as non-inheritable in the
same sense of #svn_merge_range_t.
+ Only set when this #svn_log_entry_t instance is returned by the
+ libsvn_client mergeinfo apis. Currently always FALSE when the
+ #svn_log_entry_t instance is reported by the ra layer.
+
@since New in 1.7.
@@ -16370,7 +18119,8 @@ A hash containing as keys every path committed in @a revision; the
The hash of requested revision properties, which may be NULL if it
- * would contain no revprops.
+ * would contain no revprops. Maps (const char *) property name to
+ * (svn_string_t *) property value.
The revision of the commit.
@@ -16412,7 +18162,7 @@ Source path of copy (if any).
A structure to represent a path that changed for a log entry. Same as
- #svn_log_changed_path2_t, but without the node kind.
+ the first three fields of #svn_log_changed_path2_t.
@deprecated Provided for backward compatibility with the 1.5 API.
@@ -16500,6 +18250,13 @@ server-side date of the commit.
just-committed revision.
+
+
+ Create a new svn_dirent_t instance with all values initialized to their
+ not-available values.
+
+ @since New in 1.8.
+
Return a deep copy of @a dirent, allocated in @a pool.
@@ -16526,6 +18283,37 @@ length of file text, or 0 for directories
node kind
+Return #svn_depth_infinity if boolean @a recurse is TRUE, else
+ * return #svn_depth_files.
+ *
+ * @note New code should never need to use this, it is called only
+ * from pre-depth APIs, for compatibility.
+ *
+ * @since New in 1.5.
+
+Return #svn_depth_infinity if boolean @a recurse is TRUE, else
+ * return #svn_depth_immediates.
+ *
+ * @note New code should never need to use this, it is called only
+ * from pre-depth APIs, for compatibility.
+ *
+ * @since New in 1.5.
+
+Return #svn_depth_infinity if boolean @a recurse is TRUE, else
+ * return #svn_depth_empty.
+ *
+ * @note New code should never need to use this, it is called only
+ * from pre-depth APIs, for compatibility.
+ *
+ * @since New in 1.5.
+
+Return a recursion boolean based on @a depth.
+ *
+ * Although much code has been converted to use depth, some code still
+ * takes a recurse boolean. In most cases, it makes sense to treat
+ * unknown or infinite depth as recursive, and any other depth as
+ * non-recursive (which in turn usually translates to #svn_depth_files).
+
It is sometimes convenient to indicate which parts of an #svn_dirent_t
object you are actually interested in, so that calculating and sending
the data corresponding to the other fields can be avoided. These values
@@ -16542,7 +18330,13 @@ An indication that you are interested in the @c time field
An indication that you are interested in the @c last_author field
A combination of all the dirent fields
@}
-A general subversion directory entry.
+A general subversion directory entry.
+ *
+ * @note To allow for extending the #svn_dirent_t structure in future
+ * releases, always use svn_dirent_create() to allocate the stucture.
+ *
+ * @since New in 1.6.
+
Return the appropriate depth for @a depth_str. @a word is as
@@ -16597,12 +18391,9 @@ Depth undetermined or ignored. In some contexts, this means the
will generally treat it as #svn_depth_infinity.
-An enum to indicate whether recursion is needed.
-
-
The 'official' invalid file size constant.
In printf()-style functions, format file sizes using this.
-YABT: Yet Another Boolean Type
+An enum to indicate whether recursion is needed.
Originally intended to be used in printf()-style functions to format
@@ -16698,6 +18489,15 @@ Generic three-state property to represent an unknown value for values
* not a valid value.
*
* @since New in 1.7.
+
+
+state could be true or false
+
+
+state known to be true
+
+
+state known to be false (the constant does not evaulate to false)
Return the appropriate node_kind for @a word. @a word is as
@@ -16708,12 +18508,19 @@ Return the appropriate node_kind for @a word. @a word is as
+@}
On Windows, APR_STATUS_IS_ENOTDIR includes several kinds of
* invalid-pathname error but not ERROR_INVALID_NAME, so we include it.
* We also include ERROR_DIRECTORY as that was not included in apr versions
* before 1.4.0 and this fix is not backported
@}
The various types of nodes in the Subversion filesystem.
+
+
+symbolic link
+@note This value is not currently used by the public API.
+@since New in 1.8.
+
something's here, but we don't know what
@@ -16766,12 +18573,6 @@ The pool in which this error object is allocated. (If
* Subversion's APIs are used to manage error chains, then this pool
* will contain the whole error chain of which this object is a
* member.)
-
-
-Pointer to the error we "wrap" (may be @c NULL). Via this
- * member, individual error object can be strung together into an
- * "error chain".
-
Details from the producer of error.
@@ -16790,6 +18591,18 @@ Details from the producer of error.
APR error value; possibly an SVN_ custom error code (see
* `svn_error_codes.h' for a full listing).
+
+
+Subversion error object.
+ *
+ * Defined here, rather than in svn_error.h, to avoid a recursive @#include
+ * situation.
+
+
+Pointer to the error we "wrap" (may be @c NULL). Via this
+ * member, individual error object can be strung together into an
+ * "error chain".
+
The FilePath character encoding is unknown
@@ -18178,7 +19991,8 @@ automatically, same as apr_terminate
Tear down any APR internal data structures which aren't torn down
-automatically.
+automatically. apr_terminate must be called once for every call to
+apr_initialize() or apr_app_initialize().
@remark An APR program must call this function at termination once it
has stopped using APR services. The APR developers suggest using
atexit to ensure this is called. When using APR from a language
@@ -18224,7 +20038,8 @@ Helper macro for APR_STRINGIFY
@{
Setup any APR internal data structures. This MUST be the first function
-called for any APR library.
+called for any APR library. It is safe to call apr_initialize several
+times as long as apr_terminate is called the same number of times.
@remark See apr_app_initialize if this is an application, rather than
a library consumer of apr.
@@ -18289,6 +20104,27 @@ Return a human readable string describing the specified error.
Type for specifying an error or status code.
+
+ Tries to parse a single SvnExternalItem
+
+
+ Tries to parse a single SvnExternalItem
+
+
+ Writes the value to the specified
+
+
+ Creates a string containing the external in string format. Optionally preferring formats compatible with older clients
+
+
+ Creates a string containing the external in string format. Preferring formats compatible with older clients
+
+
+ Gets the absolute or relative url of the external (What to insert)
+
+
+ Gets the target path of the external (Where to place the external)
+
Creates parent directories if required
@@ -18338,6 +20174,10 @@ for addition unversioned files and directories scattered deep within a versioned
Extended Parameter container of
+
+ Extended Parameter container of 's DeleteRepository method
+
+
Gets or sets a boolean that if set to true tells copy not to process
externals definitions as part of this operation.
@@ -18360,8 +20200,16 @@ externals definitions as part of this operation.
Extended Parameter container for SvnClient.PropertyList
-
- Gets the of the command
+
+ Only perform a metadata update and leave the working copy as-is
+
+
+ Extended Parameter container of .
+
+
+
+ Extended Parameter container of 's Write method
+
Gets the list of changelist-names
@@ -18370,8 +20218,12 @@ externals definitions as part of this operation.
Extended Parameter container of 's Diff command
-
- Extended Parameter container of
+
+ Extended Parameter container of 's DeleteRepository method
+
+
+
+ Extended Parameter container of .
@@ -18389,14 +20241,13 @@ externals definitions as part of this operation.
Extended Parameter container of 's GetProperty
-
- Extended Parameter container of 's Property method
-
-
Extended Parameter container of 's Changed method
+
+ Gets the of the command
+
Extended Parameter container of and
@@ -18408,10 +20259,17 @@ externals definitions as part of this operation.
Extended Parameter container for SvnClient.Blame
+
+ If not null allows creates a repository with this UUID
+
Extended Parameter container of 's CreateRepository method
+
+ Extended Parameter container of 's Property method
+
+
Extended Parameter container of 's GetRevisionProperty
@@ -18420,6 +20278,10 @@ externals definitions as part of this operation.
Extended Parameter container of 's Changed method
+
+ Extended Parameter container of 's Patch command
+
+
Only retrieve the properties if the node is of the specified kind. Unknown for retrieving the kind
@@ -18427,6 +20289,10 @@ externals definitions as part of this operation.
Extended Parameter container of
+
+ Extended Parameter container of
+
+
Gets the list of properties to retrieve. Only SVN 1.5+ repositories allow adding custom properties to this list
@@ -18444,41 +20310,36 @@ externals definitions as part of this operation.
Extended Parameter container of
-
- Gets or sets a boolean indicating whether the paths changed in the revision should be provided
- Defaults to true
-
-
- Extended Parameter container of 's ChangeInfo command
-
-
-
- Gets the revision in which the Url's are evaluated (Aka peg revision)
-
-
- Extended Parameter container of 's Write method
-
+
+ Gets or sets a boolean indication whether to retrieve all revision properties
+ Default value: false
-
- Tries to parse a single SvnExternalItem
+
+ Gets the list of properties to retrieve. Only SVN 1.5+ repositories allow adding custom properties to this list
+ This list defaults to the author, date, logmessage properties. Clear the list to retrieve no properties,
+or set RetrieveAllProperties to true to retrieve all properties.
+
-
- Tries to parse a single SvnExternalItem
+
+ Gets or sets a boolean indicating whether the merged revisions should be fetched instead of the node changes
-
- Writes the value to the specified
+
+ Gets or sets a boolean indicating whether only the history of this exact node should be fetched (Aka stop on copying)
+ If @a StrictNodeHistory is set, copy history (if any exists) will
+not be traversed while harvesting revision logs for each target.
-
- Creates a string containing the external in string format. Optionally preferring formats compatible with older clients
+
+ Gets or sets a boolean indicating whether the paths changed in the revision should be provided
-
- Creates a string containing the external in string format. Preferring formats compatible with older clients
+
+ Gets or sets the limit on the number of log items fetched
-
- Gets the absolute or relative url of the external (What to insert)
+
+ Gets the revision in which the Url's are evaluated (Aka peg revision)
-
- Gets the target path of the external (Where to place the external)
+
+ Extended Parameter container of 's CreateRepository method
+
Extended Parameter container of
@@ -18543,6 +20404,9 @@ if there are any unversioned obstructing items
Extended Parameter container of
+
+ Gets the of the command
+
Gets a instance for the current hook request
@@ -18550,6 +20414,13 @@ if there are any unversioned obstructing items
Extended Parameter container of 's DeleteRepository method
+
+Return the display width of UTF-8-encoded C string @a cstr.
+ * If the string is not printable or invalid UTF-8, return -1.
+ *
+ * @since New in 1.8.
+
+
Set @a *dest to a natively-encoded C string from utf8 string @a src;
* allocate @a *dest in @a pool.
@@ -18652,6 +20523,13 @@ Set @a *dest to a utf8-encoded string from native string @a src; allocate
Set @a *dest to a utf8-encoded stringbuf from native stringbuf @a src;
* allocate @a *dest in @a pool.
+
+
+ Like svn_utf_initialize2() but without the ability to force the
+ native encoding to UTF-8.
+
+ @deprecated Provided for backward compatibility with the 1.7 API.
+
@copyright
@@ -18684,17 +20562,6 @@ Set @a *dest to a utf8-encoded stringbuf from native stringbuf @a src;
@defgroup APR_Util APR Utility Functions
@{
- APU_DECLARE_EXPORT is defined when building the APR-UTIL dynamic library,
- so that all public symbols are exported.
-
- APU_DECLARE_STATIC is defined when including the APR-UTIL public headers,
- to provide static linkage when the dynamic library may be unavailable.
-
- APU_DECLARE_STATIC and APU_DECLARE_EXPORT are left undefined when
- including the APR-UTIL public headers, to import and link the symbols from
- the dynamic APR-UTIL library and assure appropriate indirection and calling
- conventions at compile time.
-
@}
@@ -18767,9 +20634,6 @@ The same as svn_dso_initialize2(), except that if there is an error this
Extended Parameter container of 's CreateRepository method
-
- Gets the of the command
-
Gets or sets the author passed to the hook scripts
@@ -18829,180 +20693,10 @@ target's properties).
Extended Parameter container of
-
-Adds the certificate @a cert to the list of trusted certificates in
-@a ssl_ctx that will be used for verification.
-See also @a serf_ssl_load_cert_file.
-
-
-
-Load a CA certificate file from a path @a file_path. If the file was loaded
-and parsed correctly, a certificate @a cert will be created and returned.
-This certificate object will be alloced in @a pool.
-
-
-
-Export a certificate to base64-encoded, zero-terminated string.
-The returned string is allocated in @a pool. Returns NULL on failure.
-
-
-
-Extract the fields of the certificate in a table with keys (sha1, notBefore,
-notAfter). The returned table will be allocated in @a pool.
-
-
-
-Extract the fields of the subject in a table with keys (E, CN, OU, O, L,
-ST and C). The returned table will be allocated in @a pool.
-
-
-
-Extract the fields of the issuer in a table with keys (E, CN, OU, O, L,
-ST and C). The returned table will be allocated in @a pool.
-
-
-
-Return the depth of the certificate.
-
-
-
-Allow SNI indicators to be sent to the server.
-
-
-
-Use the default root CA certificates as included with the OpenSSL library.
-
-
-
-Set a callback to override the default SSL server certificate validation
-algorithm.
-
-
-
- Iterates over all headers of the message and invokes the callback
- function with header key and value. Stop iterating when no more
- headers are available or when the callback function returned a
- non-0 value.
-
- @param headers_bucket headers to iterate over
- @param func callback routine to invoke for every header in the bucket
- @param baton baton to pass on each invocation to func
-
-
-
-@param baton opaque baton as passed to @see serf_bucket_headers_do
-@param key The header key from this iteration through the table
-@param value The header value from this iteration through the table
-
-
-
- Set, extended: fine grained copy control of header and value.
-
- Set the specified @a header, with length @a header_size with the
- @a value, and length @a value_size, into the bucket. The header will
- be copied if @a header_copy is set, and the value is copied if
- @a value_copy is set. If the values are not copied, then they should
- remain in scope at least as long as the bucket.
-
- If @a headers_bucket already contains a header with the same name
- as @a header, then append @a value to the existing value,
- separating with a comma (as per RFC 2616, section 4.2). In this
- case, the new value must be allocated and the header re-used, so
- behave as if @a value_copy were true and @a header_copy false.
-
-
-
- Set, no copies.
-
- Set the specified @a header and @a value into the bucket, without
- copying either attribute. Both attributes should remain in scope at
- least as long as the bucket.
-
- @note In the case where a header already exists this will result
- in a reallocation and copy, @see serf_bucket_headers_setn.
-
-
-
- Set, copies: header and value copied.
-
- Copy the specified @a header and @a value into the bucket, using space
- from this bucket's allocator.
-
-
-
- Set, default: value copied.
-
- Set the specified @a header within the bucket, copying the @a value
- into space from this bucket's allocator. The header is NOT copied,
- so it should remain in scope at least as long as the bucket.
-
-
-
-Equivalent to serf_bucket_simple_create, except that the bucket takes
-ownership of a private copy of the data.
-
-
-
-Transform @a bucket in-place into an aggregate bucket.
-
-
-serf_bucket_aggregate_cleanup will instantly destroy all buckets in
- the aggregate bucket that have been read completely. Whereas normally,
- these buckets are destroyed on every read operation.
-
-
-Advise the response @a bucket that this was from a HEAD request and
-that it should not expect to see a response body.
-
-
-
-Get the headers bucket for @a response.
-
-
-
- Wait for the HTTP headers to be processed for a @a response.
-
- If the headers are available, APR_SUCCESS is returned.
- If the headers aren't available, APR_EAGAIN is returned.
-
-
-
-Return the Status-Line information, if available. This function
-works like other bucket read functions: it may return APR_EAGAIN or
-APR_EOF to signal the state of the bucket for reading. A return
-value of APR_SUCCESS will always indicate that status line
-information was returned; for other return values the caller must
-check the version field in @a sline. A value of 0 means that the
-data is not (yet) present.
-
-
-
-Sets the root url of the remote host. If this request contains a relative
-url, it will be prefixed with the root url to form an absolute url.
-@a bucket is the request bucket. @a root_url is the absolute url of the
-root of the remote host, without the closing '/'.
-
-
-
-@file serf_bucket_types.h
-@brief serf-supported bucket types
-
-
@defgroup APR_Util APR Utility Functions
@{
- APU_DECLARE_EXPORT is defined when building the APR-UTIL dynamic library,
- so that all public symbols are exported.
-
- APU_DECLARE_STATIC is defined when including the APR-UTIL public headers,
- to provide static linkage when the dynamic library may be unavailable.
-
- APU_DECLARE_STATIC and APU_DECLARE_EXPORT are left undefined when
- including the APR-UTIL public headers, to import and link the symbols from
- the dynamic APR-UTIL library and assure appropriate indirection and calling
- conventions at compile time.
-
@}
@@ -19105,35 +20799,1295 @@ value to this.
Gets a boolean indicating whether the merge result contains conflicts
-
- Gets or sets a boolean indication whether to retrieve all revision properties
- Default value: false
-
-
- Gets the list of properties to retrieve. Only SVN 1.5+ repositories allow adding custom properties to this list
- This list defaults to the author, date, logmessage properties. Clear the list to retrieve no properties,
-or set RetrieveAllProperties to true to retrieve all properties.
-
-
-
- Gets or sets a boolean indicating whether the merged revisions should be fetched instead of the node changes
-
-
- Gets or sets a boolean indicating whether only the history of this exact node should be fetched (Aka stop on copying)
- If @a StrictNodeHistory is set, copy history (if any exists) will
-not be traversed while harvesting revision logs for each target.
-
-
- Gets or sets a boolean indicating whether the paths changed in the revision should be provided
-
-
- Gets or sets the limit on the number of log items fetched
-
Extended Parameter container of
-
+
+@}
+@}
+A temporary API which conditionally inserts a double editor shim
+ * into the chain of delta editors. Used for testing Editor v2.
+ *
+ * Whether or not the shims are inserted is controlled by a compile-time
+ * option in libsvn_delta/compat.c.
+ *
+ * @note The use of these shims and this API will likely cause all kinds
+ * of performance degredation. (Which is actually a moot point since they
+ * don't even work properly yet anyway.)
+
+
+
+Drive @a editor's #svn_editor_cb_abort_t callback.
+ *
+ * Notify that the edit transmission was not successful.
+ * ### TODO @todo Shouldn't we add a reason-for-aborting argument?
+ *
+ * For all restrictions on driving the editor, see #svn_editor_t.
+ * @since New in 1.8.
+
+
+
+Drive @a editor's #svn_editor_cb_complete_t callback.
+ *
+ * Send word that the edit has been completed successfully.
+ *
+ * For all restrictions on driving the editor, see #svn_editor_t.
+ * @since New in 1.8.
+
+
+
+Drive @a editor's #svn_editor_cb_rotate_t callback.
+ *
+ * Perform a rotation among multiple nodes in the target tree.
+ *
+ * The @a relpaths and @a revisions arrays (pair-wise) specify nodes in the
+ * tree which are located at a path and expected to be at a specific
+ * revision. These nodes are simultaneously moved in a rotation pattern.
+ * For example, the node at index 0 of @a relpaths and @a revisions will
+ * be moved to the relpath specified at index 1 of @a relpaths. The node
+ * at index 1 will be moved to the location at index 2. The node at index
+ * N-1 will be moved to the relpath specified at index 0.
+ *
+ * The simplest form of this operation is to swap nodes A and B. One may
+ * think to move A to a temporary location T, then move B to A, then move
+ * T to B. However, this last move violations the Once Rule by moving T
+ * (which had already by edited by the move from A). In order to keep the
+ * restrictions against multiple moves of a single node, the rotation
+ * operation is needed for certain types of tree edits.
+ *
+ * ### what happens if one of the paths of the rotation is not "within" the
+ * ### receiver's set of paths?
+ *
+ * For all restrictions on driving the editor, see #svn_editor_t.
+ * @since New in 1.8.
+
+
+
+Drive @a editor's #svn_editor_cb_move_t callback.
+ *
+ * Move the node at @a src_relpath to @a dst_relpath.
+ *
+ * @a src_revision specifies the revision at which the receiver should
+ * expect to find this node. That is, @a src_relpath at the start of
+ * the whole edit and @a src_relpath at @a src_revision must lie within
+ * the same node-rev (aka history-segment). This is just like the
+ * revisions specified to svn_editor_delete() and svn_editor_rotate().
+ *
+ * For a description of @a replaces_rev, see svn_editor_add_file().
+ *
+ * ### what happens if one side of this move is not "within" the receiver's
+ * ### set of paths?
+ *
+ * For all restrictions on driving the editor, see #svn_editor_t.
+ * @since New in 1.8.
+
+
+
+Drive @a editor's #svn_editor_cb_copy_t callback.
+ *
+ * Copy the node at @a src_relpath, expected to be identical to revision @a
+ * src_revision of that path, to @a dst_relpath.
+ *
+ * For a description of @a replaces_rev, see svn_editor_add_file().
+ *
+ * @note See the general instructions on paths for this API. Since the
+ * @a src_relpath argument must generally be able to reference any node
+ * in the repository, the implication is that the editor's root must be
+ * the repository root.
+ *
+ * For all restrictions on driving the editor, see #svn_editor_t.
+ * @since New in 1.8.
+
+
+
+Drive @a editor's #svn_editor_cb_delete_t callback.
+ *
+ * Delete the existing node at @a relpath, expected to be identical to
+ * revision @a revision of that path.
+ *
+ * For all restrictions on driving the editor, see #svn_editor_t.
+ * @since New in 1.8.
+
+
+
+Drive @a editor's #svn_editor_cb_alter_symlink_t callback.
+ *
+ * Alter the properties and/or the target of the symlink at @a relpath
+ * with @a revision as its expected revision. See svn_editor_alter_directory()
+ * for more information about @a revision.
+ *
+ * If @a props is non-NULL, then the properties will be applied.
+ *
+ * If @a target is non-NULL, then the symlink's target will be updated.
+ *
+ * The properties and/or the target must be changed. It is an error to
+ * pass NULL for @a props and @a target.
+ *
+ * This function allows @a props to be NULL, but the parameter is
+ * otherwise described by svn_editor_add_file().
+ *
+ * For all restrictions on driving the editor, see #svn_editor_t.
+ * @since New in 1.8.
+
+
+
+Drive @a editor's #svn_editor_cb_alter_file_t callback.
+ *
+ * Alter the properties and/or the contents of the file at @a relpath
+ * with @a revision as its expected revision. See svn_editor_alter_directory()
+ * for more information about @a revision.
+ *
+ * If @a props is non-NULL, then the properties will be applied.
+ *
+ * If @a contents is non-NULL, then the stream will be copied to
+ * the file, and its checksum must match @a checksum (which must also
+ * be non-NULL). If @a contents is NULL, then @a checksum must also
+ * be NULL, and no change will be applied to the file's contents.
+ *
+ * The properties and/or the contents must be changed. It is an error to
+ * pass NULL for @a props, @a checksum, and @a contents.
+ *
+ * For a description of @a checksum and @a contents see
+ * svn_editor_add_file(). This function allows @a props to be NULL, but
+ * the parameter is otherwise described by svn_editor_add_file().
+ *
+ * For all restrictions on driving the editor, see #svn_editor_t.
+ * @since New in 1.8.
+
+
+
+Drive @a editor's #svn_editor_cb_alter_directory_t callback.
+ *
+ * Alter the properties of the directory at @a relpath.
+ *
+ * @a revision specifies the revision at which the receiver should
+ * expect to find this node. That is, @a relpath at the start of the
+ * whole edit and @a relpath at @a revision must lie within the same
+ * node-rev (aka location history segment). This information may be used
+ * to catch an attempt to alter and out-of-date directory. If the
+ * directory does not have a corresponding revision in the repository
+ * (e.g. it has not yet been committed), then @a revision should be
+ * #SVN_INVALID_REVNUM.
+ *
+ * If any changes to the set of children will be made in the future of
+ * the edit drive, then @a children MUST specify the resulting set of
+ * children. See svn_editor_add_directory() for the format of @a children.
+ * If not changes will be made, then NULL may be specified.
+ *
+ * For a description of @a props, see svn_editor_add_file(). If no changes
+ * to the properties will be made (ie. only future changes to the set of
+ * children), then @a props may be NULL.
+ *
+ * It is an error to pass NULL for both @a children and @a props.
+ *
+ * For all restrictions on driving the editor, see #svn_editor_t.
+ * @since New in 1.8.
+
+
+
+Drive @a editor's #svn_editor_cb_add_absent_t callback.
+ *
+ * Create an "absent" node of kind @a kind at @a relpath. The immediate
+ * parent of @a relpath is expected to exist.
+ * ### TODO @todo explain "absent".
+ * ### JAF: What are the allowed values of 'kind'?
+ *
+ * For a description of @a replaces_rev, see svn_editor_add_file().
+ *
+ * For all restrictions on driving the editor, see #svn_editor_t.
+ * @since New in 1.8.
+
+
+
+Drive @a editor's #svn_editor_cb_add_symlink_t callback.
+ *
+ * Create a new symbolic link at @a relpath, with a link target of @a
+ * target. The immediate parent of @a relpath is expected to exist.
+ *
+ * For descriptions of @a props and @a replaces_rev, see
+ * svn_editor_add_file().
+ *
+ * For all restrictions on driving the editor, see #svn_editor_t.
+ * @since New in 1.8.
+
+
+
+Drive @a editor's #svn_editor_cb_add_file_t callback.
+ *
+ * Create a new file at @a relpath. The immediate parent of @a relpath
+ * is expected to exist.
+ *
+ * The file's contents are specified in @a contents which has a checksum
+ * matching @a checksum. Both values must be non-NULL.
+ *
+ * Set the properties of the new file to @a props, which is an
+ * apr_hash_t holding key-value pairs. Each key is a const char* of a
+ * property name, each value is a const svn_string_t*. If no properties are
+ * being set on the new file, @a props must be the empty hash. It is an
+ * error to pass NULL for @a props.
+ *
+ * If this add is expected to replace a previously existing file, symlink or
+ * directory at @a relpath, the revision number of the node to be replaced
+ * must be given in @a replaces_rev. Otherwise, @a replaces_rev must be
+ * #SVN_INVALID_REVNUM. Note: it is not allowed to call a "delete" followed
+ * by an "add" on the same path. Instead, an "add" with @a replaces_rev set
+ * accordingly MUST be used.
+ *
+ * For all restrictions on driving the editor, see #svn_editor_t.
+ * @since New in 1.8.
+
+
+
+@}
+These functions are called by the tree delta driver to edit the target.
+ *
+ * @see svn_editor_t.
+ *
+ * @defgroup svn_editor_drive Driving the editor
+ * @{
+
+Drive @a editor's #svn_editor_cb_add_directory_t callback.
+ *
+ * Create a new directory at @a relpath. The immediate parent of @a relpath
+ * is expected to exist.
+ *
+ * For descriptions of @a props and @a replaces_rev, see
+ * svn_editor_add_file().
+ *
+ * A complete listing of the immediate children of @a relpath that will be
+ * added subsequently is given in @a children. @a children is an array of
+ * const char*s, each giving the basename of an immediate child. It is an
+ * error to pass NULL for @a children; use an empty array to indicate
+ * the new directory will have no children.
+ *
+ * For all restrictions on driving the editor, see #svn_editor_t.
+
+
+
+Sets all the callback functions in @a editor at once, according to the
+ * callback functions stored in @a many.
+ * @a scratch_pool is used for temporary allocations (if any).
+ * @since New in 1.8.
+
+
+
+Lists a complete set of editor callbacks.
+ * This is a convenience structure.
+ * @see svn_editor_setcb_many(), svn_editor_create(), svn_editor_t.
+ * @since New in 1.8.
+
+
+
+Sets the #svn_editor_cb_abort_t callback in @a editor
+ * to @a callback.
+ * @a scratch_pool is used for temporary allocations (if any).
+ * @see also svn_editor_setcb_many().
+ * @since New in 1.8.
+
+
+
+Sets the #svn_editor_cb_complete_t callback in @a editor
+ * to @a callback.
+ * @a scratch_pool is used for temporary allocations (if any).
+ * @see also svn_editor_setcb_many().
+ * @since New in 1.8.
+
+
+
+Sets the #svn_editor_cb_rotate_t callback in @a editor
+ * to @a callback.
+ * @a scratch_pool is used for temporary allocations (if any).
+ * @see also svn_editor_setcb_many().
+ * @since New in 1.8.
+
+
+
+Sets the #svn_editor_cb_move_t callback in @a editor
+ * to @a callback.
+ * @a scratch_pool is used for temporary allocations (if any).
+ * @see also svn_editor_setcb_many().
+ * @since New in 1.8.
+
+
+
+Sets the #svn_editor_cb_copy_t callback in @a editor
+ * to @a callback.
+ * @a scratch_pool is used for temporary allocations (if any).
+ * @see also svn_editor_setcb_many().
+ * @since New in 1.8.
+
+
+
+Sets the #svn_editor_cb_delete_t callback in @a editor
+ * to @a callback.
+ * @a scratch_pool is used for temporary allocations (if any).
+ * @see also svn_editor_setcb_many().
+ * @since New in 1.8.
+
+
+
+Sets the #svn_editor_cb_alter_symlink_t callback in @a editor
+ * to @a callback.
+ * @a scratch_pool is used for temporary allocations (if any).
+ * @see also svn_editor_setcb_many().
+ * @since New in 1.8.
+
+
+
+Sets the #svn_editor_cb_alter_file_t callback in @a editor
+ * to @a callback.
+ * @a scratch_pool is used for temporary allocations (if any).
+ * @see also svn_editor_setcb_many().
+ * @since New in 1.8.
+
+
+
+Sets the #svn_editor_cb_alter_directory_t callback in @a editor
+ * to @a callback.
+ * @a scratch_pool is used for temporary allocations (if any).
+ * @see also svn_editor_setcb_many().
+ * @since New in 1.8.
+
+
+
+Sets the #svn_editor_cb_add_absent_t callback in @a editor
+ * to @a callback.
+ * @a scratch_pool is used for temporary allocations (if any).
+ * @see also svn_editor_setcb_many().
+ * @since New in 1.8.
+
+
+
+Sets the #svn_editor_cb_add_symlink_t callback in @a editor
+ * to @a callback.
+ * @a scratch_pool is used for temporary allocations (if any).
+ * @see also svn_editor_setcb_many().
+ * @since New in 1.8.
+
+
+
+Sets the #svn_editor_cb_add_file_t callback in @a editor
+ * to @a callback.
+ * @a scratch_pool is used for temporary allocations (if any).
+ * @see also svn_editor_setcb_many().
+ * @since New in 1.8.
+
+
+
+Sets the #svn_editor_cb_add_directory_t callback in @a editor
+ * to @a callback.
+ * @a scratch_pool is used for temporary allocations (if any).
+ * @see also svn_editor_setcb_many().
+ * @since New in 1.8.
+
+
+
+Return an editor's private baton.
+ *
+ * In some cases, the baton is required outside of the callbacks. This
+ * function returns the private baton for use.
+ *
+ * @since New in 1.8.
+
+
+
+@}
+These functions create an editor instance so that it can be driven.
+ *
+ * @defgroup svn_editor_create Editor creation
+ * @{
+
+Allocate an #svn_editor_t instance from @a result_pool, store
+ * @a editor_baton, @a cancel_func and @a cancel_baton in the new instance
+ * and return it in @a editor.
+ * @a scratch_pool is used for temporary allocations (if any). Note that
+ * this is NOT the same @a scratch_pool that is passed to callback functions.
+ * @see svn_editor_t
+ * @since New in 1.8.
+
+
+
+@see svn_editor_abort(), svn_editor_t.
+ * @since New in 1.8.
+
+
+
+@see svn_editor_complete(), svn_editor_t.
+ * @since New in 1.8.
+
+
+
+@see svn_editor_rotate(), svn_editor_t.
+ * @since New in 1.8.
+
+
+
+@see svn_editor_move(), svn_editor_t.
+ * @since New in 1.8.
+
+
+
+@see svn_editor_copy(), svn_editor_t.
+ * @since New in 1.8.
+
+
+
+@see svn_editor_delete(), svn_editor_t.
+ * @since New in 1.8.
+
+
+
+@see svn_editor_alter_symlink(), svn_editor_t.
+ * @since New in 1.8.
+
+
+
+@see svn_editor_alter_file(), svn_editor_t.
+ * @since New in 1.8.
+
+
+
+@see svn_editor_alter_directory(), svn_editor_t.
+ * @since New in 1.8.
+
+
+
+@see svn_editor_add_absent(), svn_editor_t.
+ * @since New in 1.8.
+
+
+
+@see svn_editor_add_symlink(), svn_editor_t.
+ * @since New in 1.8.
+
+
+
+@see svn_editor_add_file(), svn_editor_t.
+ * @since New in 1.8.
+
+
+
+The kind of the checksum to be used throughout the #svn_editor_t APIs.
+ *
+ * @note ### This may change before Ev2 is official released, so just like
+ * everything else in this file, please don't rely upon it until then.
+
+These function types define the callback functions a tree delta consumer
+ * implements.
+ *
+ * Each of these "receiving" function types matches a "driving" function,
+ * which has the same arguments with these differences:
+ *
+ * - These "receiving" functions have a @a baton argument, which is the
+ * @a editor_baton originally passed to svn_editor_create(), as well as
+ * a @a scratch_pool argument.
+ *
+ * - The "driving" functions have an #svn_editor_t* argument, in order to
+ * call the implementations of the function types defined here that are
+ * registered with the given #svn_editor_t instance.
+ *
+ * Note that any remaining arguments for these function types are explained
+ * in the comment for the "driving" functions. Each function type links to
+ * its corresponding "driver".
+ *
+ * @see svn_editor_t, svn_editor_cb_many_t.
+ *
+ * @defgroup svn_editor_callbacks Editor callback definitions
+ * @{
+
+@see svn_editor_add_directory(), svn_editor_t.
+ * @since New in 1.8.
+
+
+
+Transforming trees ("editing").
+ *
+ * In Subversion, we have a number of occasions where we transform a tree
+ * from one state into another. This process is called "editing" a tree.
+ *
+ * In processing a `commit' command:
+ * - The client examines its working copy data to determine the set of
+ * changes necessary to transform its base tree into the desired target.
+ * - The client networking library delivers that set of changes/operations
+ * across the wire as an equivalent series of network requests (for
+ * example, to svnserve as an ra_svn protocol stream, or to an
+ * Apache httpd server as WebDAV commands)
+ * - The server receives those requests and applies the sequence of
+ * operations on a revision, producing a transaction representing the
+ * desired target.
+ * - The Subversion server then commits the transaction to the filesystem.
+ *
+ * In processing an `update' command, the process is reversed:
+ * - The Subversion server module talks to the filesystem and computes a
+ * set of changes necessary to bring the client's working copy up to date.
+ * - The server serializes this description of changes, and delivers it to
+ * the client.
+ * - The client networking library receives that reply, producing a set
+ * of changes/operations to alter the working copy into the revision
+ * requested by the update command.
+ * - The working copy library applies those operations to the working copy
+ * to align it with the requested update target.
+ *
+ * The series of changes (or operations) necessary to transform a tree from
+ * one state into another is passed between subsystems using this "editor"
+ * interface. The "receiver" edits its tree according to the operations
+ * described by the "driver".
+ *
+ * Note that the driver must have a perfect understanding of the tree which
+ * the receiver will be applying edits upon. There is no room for error here,
+ * and the interface embodies assumptions/requirements that the driver has
+ * about the targeted tree. As a result, this interface is a standardized
+ * mechanism of *describing* those change operations, but the intimate
+ * knowledge between the driver and the receiver implies some level of
+ * coupling between those subsystems.
+ *
+ * The set of changes, and the data necessary to describe it entirely, is
+ * completely unbounded. An addition of one simple 20 GB file might be well
+ * past the available memory of a machine processing these operations.
+ * As a result, the API to describe the changes is designed to be applied
+ * in a sequential (and relatively random-access) model. The operations
+ * can be streamed from the driver to the receiver, resulting in the
+ * receiver editing its tree to the target state defined by the driver.
+ *
+ *
+ * History
+ *
+ * Classically, Subversion had a notion of a "tree delta" which could be
+ * passed around as an independent entity. Theory implied this delta was an
+ * entity in its own right, to be used when and where necessary.
+ * Unfortunately, this theory did not work well in practice. The producer
+ * and consumer of these tree deltas were (and are) tightly coupled. As noted
+ * above, the tree delta producer needed to be *totally* aware of the tree
+ * that it needed to edit. So rather than telling the delta consumer how to
+ * edit its tree, the classic #svn_delta_editor_t interface focused
+ * entirely on the tree delta, an intermediate (logical) data structure
+ * which was unusable outside of the particular, coupled pairing of producer
+ * and consumer. This generation of the API forgoes the logical tree delta
+ * entity and directly passes the necessary edits/changes/operations from
+ * the producer to the consumer. In our new parlance, one subsystem "drives"
+ * a set of operations describing the change, and a "receiver" accepts and
+ * applies them to its tree.
+ *
+ * The classic interface was named #svn_delta_editor_t and was described
+ * idiomatically as the "editor interface". This generation of the interface
+ * retains the "editor" name for that reason. All notions of a "tree delta"
+ * structure are no longer part of this interface.
+ *
+ * The old interface was purely vtable-based and used a number of special
+ * editors which could be interposed between the driver and receiver. Those
+ * editors provided cancellation, debugging, and other various operations.
+ * While the "interposition" pattern is still possible with this interface,
+ * the most common functionality (cancellation and debugging) have been
+ * integrated directly into this new editor system.
+ *
+ *
+ * Implementation Plan
+ * @note This section can be removed after Ev2 is fully implemented.
+ *
+ * The delta editor is pretty engrained throughout Subversion, so attempting
+ * to replace it in situ is somewhat akin to performing open heart surgery
+ * while the patient is running a marathon. However, a viable plan should
+ * make things a bit easier, and help parallelize the work.
+ *
+ * In short, the following items need to be done:
+ * -# Implement backward compatibility wrappers ("shims")
+ * -# Use shims to update editor consumers to Ev2
+ * -# Update editor producers to drive Ev2
+ * - This will largely involve rewriting the RA layers to accept and
+ * send Ev2 commands
+ * -# Optimize consumers and producers to leverage the features of Ev2
+ *
+ * The shims are largely self-contained, and as of this writing, are almost
+ * complete. They can be released without much ado. However, they do add
+ * significant performance regressions, which make releasing code
+ * which is half-delta-editor and half-Ev2 inadvisable. As such, the updating
+ * of producers and consumers to Ev2 will probably need to wait until 1.9,
+ * though it could be largely parallelized.
+ *
+ *
+ * @defgroup svn_editor The editor interface
+ * @{
+
+An abstract object that edits a target tree.
+ *
+ * @note The term "follow" means at any later time in the editor drive.
+ * Terms such as "must", "must not", "required", "shall", "shall not",
+ * "should", "should not", "recommended", "may", and "optional" in this
+ * document are to be interpreted as described in RFC 2119.
+ *
+ * @note The editor objects are *not* reentrant. The receiver should not
+ * directly or indirectly invoke an editor API with the same object unless
+ * it has been marked as explicitly supporting reentrancy during a
+ * receiver's callback. This limitation extends to the cancellation
+ * callback, too. (This limitation is due to the scratch_pool shared by
+ * all callbacks, and cleared after each callback; a reentrant call could
+ * clear the outer call's pool). Note that the code itself is reentrant, so
+ * there is no problem using the APIs on different editor objects.
+ *
+ * \n
+ * Life-Cycle
+ *
+ * - @b Create: A receiver uses svn_editor_create() to create an
+ * "empty" svn_editor_t. It cannot be used yet, since it still lacks
+ * actual callback functions. svn_editor_create() sets the
+ * #svn_editor_t's callback baton and scratch pool that the callback
+ * functions receive, as well as a cancellation callback and baton
+ * (see "Cancellation" below).
+ *
+ * - @b Set callbacks: The receiver calls svn_editor_setcb_many() or a
+ * succession of the other svn_editor_setcb_*() functions to tell
+ * #svn_editor_t which functions to call when driven by the various
+ * operations. Callback functions are implemented by the receiver and must
+ * adhere to the @c svn_editor_cb_*_t function types as expected by the
+ * svn_editor_setcb_*() functions. See: \n
+ * svn_editor_cb_many_t \n
+ * svn_editor_setcb_many() \n
+ * or \n
+ * svn_editor_setcb_add_directory() \n
+ * svn_editor_setcb_add_file() \n
+ * svn_editor_setcb_add_symlink() \n
+ * svn_editor_setcb_add_absent() \n
+ * svn_editor_setcb_alter_directory() \n
+ * svn_editor_setcb_alter_file() \n
+ * svn_editor_setcb_alter_symlink() \n
+ * svn_editor_setcb_delete() \n
+ * svn_editor_setcb_copy() \n
+ * svn_editor_setcb_move() \n
+ * svn_editor_setcb_rotate() \n
+ * svn_editor_setcb_complete() \n
+ * svn_editor_setcb_abort()
+ *
+ * - @b Drive: The driver is provided with the completed #svn_editor_t
+ * instance. (It is typically passed to a generic driving
+ * API, which could receive the driving editor calls over the network
+ * by providing a proxy #svn_editor_t on the remote side.)
+ * The driver invokes the #svn_editor_t instance's callback functions
+ * according to the restrictions defined below, in order to describe the
+ * entire set of operations necessary to transform the receiver's tree
+ * into the desired target. The callbacks can be invoked using the
+ * svn_editor_*() functions, i.e.: \n
+ * svn_editor_add_directory() \n
+ * svn_editor_add_file() \n
+ * svn_editor_add_symlink() \n
+ * svn_editor_add_absent() \n
+ * svn_editor_alter_directory() \n
+ * svn_editor_alter_file() \n
+ * svn_editor_alter_symlink() \n
+ * svn_editor_delete() \n
+ * svn_editor_copy() \n
+ * svn_editor_move() \n
+ * svn_editor_rotate()
+ * \n\n
+ * Just before each callback invocation is carried out, the @a cancel_func
+ * that was passed to svn_editor_create() is invoked to poll any
+ * external reasons to cancel the sequence of operations. Unless it
+ * overrides the cancellation (denoted by #SVN_ERR_CANCELLED), the driver
+ * aborts the transmission by invoking the svn_editor_abort() callback.
+ * Exceptions to this are calls to svn_editor_complete() and
+ * svn_editor_abort(), which cannot be canceled externally.
+ *
+ * - @b Receive: While the driver invokes operations upon the editor, the
+ * receiver finds its callback functions called with the information
+ * to operate on its tree. Each actual callback function receives those
+ * arguments that the driver passed to the "driving" functions, plus these:
+ * - @a baton: This is the @a editor_baton pointer originally passed to
+ * svn_editor_create(). It may be freely used by the callback
+ * implementation to store information across all callbacks.
+ * - @a scratch_pool: This temporary pool is cleared directly after
+ * each callback returns. See "Pool Usage".
+ * \n\n
+ * If the receiver encounters an error within a callback, it returns an
+ * #svn_error_t*. The driver receives this and aborts transmission.
+ *
+ * - @b Complete/Abort: The driver will end transmission by calling \n
+ * svn_editor_complete() if successful, or \n
+ * svn_editor_abort() if an error or cancellation occurred.
+ * \n\n
+ *
+ * Driving Order Restrictions
+ * In order to reduce complexity of callback receivers, the editor callbacks
+ * must be driven in adherence to these rules:
+ *
+ * - If any path is added (with add_*) or deleted/moved/rotated, then
+ * an svn_editor_alter_directory() call must be made for its parent
+ * directory with the target/eventual set of children.
+ *
+ * - svn_editor_add_directory() -- Another svn_editor_add_*() call must
+ * follow for each child mentioned in the @a children argument of any
+ * svn_editor_add_directory() call.
+ *
+ * - For each node created with add_*, if its parent was created using
+ * svn_editor_add_directory(), then the new child node MUST have been
+ * mentioned in the @a children parameter of the parent's creation.
+ * This allows the parent directory to properly mark the child as
+ * "incomplete" until the child's add_* call arrives.
+ *
+ * - A path should never be referenced more than once by the add_*, alter_*,
+ * and delete operations (the "Once Rule"). The source path of a copy (and
+ * its children, if a directory) may be copied many times, and are
+ * otherwise subject to the Once Rule. The destination path of a copy
+ * or move may have alter_* operations applied, but not add_* or delete.
+ * If the destination path of a copy, move, or rotate is a directory,
+ * then its children are subject to the Once Rule. The source path of
+ * a move (and its child paths) may be referenced in add_*, or as the
+ * destination of a copy (where these new or copied nodes are subject
+ * to the Once Rule). Paths listed in a rotation are both sources and
+ * destinations, so they may not be referenced again in an add_* or a
+ * deletion; these paths may have alter_* operations applied.
+ *
+ * - The ancestor of an added, copied-here, moved-here, rotated, or
+ * modified node may not be deleted. The ancestor may not be moved
+ * (instead: perform the move, *then* the edits).
+ *
+ * - svn_editor_delete() must not be used to replace a path -- i.e.
+ * svn_editor_delete() must not be followed by an svn_editor_add_*() on
+ * the same path, nor by an svn_editor_copy() or svn_editor_move() with
+ * the same path as the copy/move target.
+ *
+ * Instead of a prior delete call, the add/copy/move callbacks should be
+ * called with the @a replaces_rev argument set to the revision number of
+ * the node at this path that is being replaced. Note that the path and
+ * revision number are the key to finding any other information about the
+ * replaced node, like node kind, etc.
+ * @todo say which function(s) to use.
+ *
+ * - svn_editor_delete() must not be used to move a path -- i.e.
+ * svn_editor_delete() must not delete the source path of a previous
+ * svn_editor_copy() call. Instead, svn_editor_move() must be used.
+ * Note: if the desired semantics is one (or more) copies, followed
+ * by a delete... that is fine. It is simply that svn_editor_move()
+ * should be used to describe a semantic move.
+ *
+ * - Paths mentioned in svn_editor_rotate() may have their properties
+ * and contents edited (via alter_* calls) by a previous or later call,
+ * but they may not be subject to a later move, rotate, or deletion.
+ *
+ * - One of svn_editor_complete() or svn_editor_abort() must be called
+ * exactly once, which must be the final call the driver invokes.
+ * Invoking svn_editor_complete() must imply that the set of changes has
+ * been transmitted completely and without errors, and invoking
+ * svn_editor_abort() must imply that the transformation was not completed
+ * successfully.
+ *
+ * - If any callback invocation (besides svn_editor_complete()) returns
+ * with an error, the driver must invoke svn_editor_abort() and stop
+ * transmitting operations.
+ * \n\n
+ *
+ * Receiving Restrictions
+ *
+ * All callbacks must complete their handling of a path before they return.
+ * Since future callbacks will never reference this path again (due to the
+ * Once Rule), the changes can and should be completed.
+ *
+ * This restriction is not recursive -- a directory's children may remain
+ * incomplete until later callback calls are received.
+ *
+ * For example, an svn_editor_add_directory() call during an 'update'
+ * operation will create the directory itself, including its properties,
+ * and will complete any client notification for the directory itself.
+ * The immediate children of the added directory, given in @a children,
+ * will be recorded in the WC as 'incomplete' and will be completed in the
+ * course of the same operation sequence, when the corresponding callbacks
+ * for these items are invoked.
+ * \n\n
+ *
+ * Timing and State
+ * The calls made by the driver to alter the state in the receiver are
+ * based on the receiver's *current* state, which includes all prior changes
+ * made during the edit.
+ *
+ * Example: copy A to B; set-props on A; copy A to C. The props on C
+ * should reflect the updated properties of A.
+ *
+ * Example: mv A@N to B; mv C@M to A. The second move cannot be marked as
+ * a "replacing" move since it is not replacing A. The node at A was moved
+ * away. The second operation is simply moving C to the now-empty path
+ * known as A.
+ *
+ * Paths
+ * Each driver/receiver implementation of this editor interface must
+ * establish the expected root for all the paths sent and received via
+ * the callbacks' @a relpath arguments.
+ *
+ * For example, during an "update", the driver is the repository, as a
+ * whole. The receiver may have just a portion of that repository. Here,
+ * the receiver could tell the driver which repository URL the working
+ * copy refers to, and thus the driver could send @a relpath arguments
+ * that are relative to the receiver's working copy.
+ *
+ * @note Because the source of a copy may be located *anywhere* in the
+ * repository, editor drives should typically use the repository root
+ * as the negotiated root. This allows the @a src_relpath argument in
+ * svn_editor_copy() to specify any possible source.
+ * \n\n
+ *
+ * Pool Usage
+ * The @a result_pool passed to svn_editor_create() is used to allocate
+ * the #svn_editor_t instance, and thus it must not be cleared before the
+ * driver has finished driving the editor.
+ *
+ * The @a scratch_pool passed to each callback invocation is derived from
+ * the @a result_pool that was passed to svn_editor_create(). It is
+ * cleared directly after each single callback invocation.
+ * To allocate memory with a longer lifetime from within a callback
+ * function, you may use your own pool kept in the @a editor_baton.
+ *
+ * The @a scratch_pool passed to svn_editor_create() may be used to help
+ * during construction of the #svn_editor_t instance, but it is assumed to
+ * live only until svn_editor_create() returns.
+ * \n\n
+ *
+ * Cancellation
+ * To allow graceful interruption by external events (like a user abort),
+ * svn_editor_create() can be passed an #svn_cancel_func_t that is
+ * polled every time the driver invokes a callback, just before the
+ * actual editor callback implementation is invoked. If this function
+ * decides to return with an error, the driver will receive this error
+ * as if the callback function had returned it, i.e. as the result from
+ * calling any of the driving functions (e.g. svn_editor_add_directory()).
+ * As with any other error, the driver must then invoke svn_editor_abort()
+ * and abort the transformation sequence. See #svn_cancel_func_t.
+ *
+ * The @a cancel_baton argument to svn_editor_create() is passed
+ * unchanged to each poll of @a cancel_func.
+ *
+ * The cancellation function and baton are typically provided by the client
+ * context.
+ *
+ *
+ * @todo ### TODO anything missing?
+ *
+ * @since New in 1.8.
+
+
+
+Return a collection of default shim functions in @a result_pool.
+
+
+
+Collection of callbacks used for the shim code. This structure
+ * may grow additional fields in the future. Therefore, always use
+ * svn_delta_shim_callbacks_default() to allocate new instances of it.
+
+
+
+Callback to fetch the name of a file to use as a delta base.
+ *
+ * Implementations should set @a *filename to the name of a file
+ * suitable for use as a delta base for @a path in @a base_revision
+ * (allocating @a *filename from @a result_pool), or to @c NULL if the
+ * base stream is empty. @a scratch_pool is provided for temporary
+ * allocations.
+ *
+ * @a baton is an implementation-specific closure.
+
+
+
+Callback to retrieve a node's kind. This is needed by the various
+ * editor shims in order to effect backwards compatibility.
+ *
+ * Implementations should set @a *kind to the node kind of @a path in
+ * @a base_revision, using @a scratch_pool for temporary allocations.
+ *
+ * @a baton is an implementation-specific closure.
+
+
+
+ @copyright
+ ====================================================================
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ ====================================================================
+ @endcopyright
+
+ @file svn_editor.h
+ @brief Tree editing functions and structures
+
+ @copyright
+ ====================================================================
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ ====================================================================
+ @endcopyright
+
+ @file svn_types.h
+ @brief Subversion's data types
+
+ @copyright
+ ====================================================================
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ ====================================================================
+ @endcopyright
+
+ @file svn_error.h
+ @brief Common exception handling for Subversion.
+
+ @copyright
+ ====================================================================
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ ====================================================================
+ @endcopyright
+
+ @file svn_io.h
+ @brief General file I/O for Subversion
+
+ @copyright
+ ====================================================================
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ ====================================================================
+ @endcopyright
+
+ @file svn_delta.h
+ @brief Delta-parsing
+
+Callback to retrieve a node's entire set of properties. This is
+ * needed by the various editor shims in order to effect backwards
+ * compatibility.
+ *
+ * Implementations should set @a *props to the hash of properties
+ * associated with @a path in @a base_revision, allocating that hash
+ * and its contents in @a result_pool, and should use @a scratch_pool
+ * for temporary allocations.
+ *
+ * @a baton is an implementation-specific closure.
+
+
+
+ Create a new svn_diff_tree_processor_t instance with all functions setup
+ to first call into processor1 and then processor2.
+
+ This function is mostly a debug and migration helper.
+
+ @since New in 1.8.
+
+
+
+ Create a new svn_diff_tree_processor_t instace with all function setup
+ to call into processor with all adds with copyfrom information transformed
+ to simple node changes.
+
+ @since New in 1.8.
+
+
+
+ Create a new svn_diff_tree_processor_t instance with all functions setup
+ to call into processor for all paths equal to and below prefix_relpath.
+
+ @since New in 1.8.
+
+
+
+ Create a new svn_diff_tree_processor_t instance with all functions setup
+ to call into another svn_diff_tree_processor_t processor, but with all
+ adds and deletes inverted.
+
+ @since New in 1.8.
+
+
+
+ Create a new svn_diff_tree_processor_t instance with all functions
+ set to a callback doing nothing but copying the parent baton to
+ the new baton.
+
+ @since New in 1.8.
+
+
+
+The value passed to svn_diff__tree_processor_create() as BATON.
+
+
+
+ A callback vtable invoked by our diff-editors, as they receive diffs
+ from the server. 'svn diff' and 'svn merge' implement their own versions
+ of this vtable.
+
+ All callbacks receive the processor and at least a parent baton. Forwarding
+ the processor allows future extensions to call into the old functions without
+ revving the entire API.
+
+ Users must call svn_diff__tree_processor_create() to allow adding new
+ callbacks later. (E.g. when we decide how to add move support) These
+ extensions can then just call into other callbacks.
+
+ @since New in 1.8.
+
+
+
+ @copyright
+ ====================================================================
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ ====================================================================
+ @endcopyright
+
+ @file svn_wc.h
+ @brief Generic diff handler. Replacing the old svn_wc_diff_callbacks4_t
+ infrastructure
+
+ @copyright
+ ====================================================================
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ ====================================================================
+ @endcopyright
+
+ @file svn_types.h
+ @brief Subversion's data types
+
+
+ @copyright
+ ====================================================================
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ ====================================================================
+ @endcopyright
+
+ @file svn_wc_private.h
+ @brief The Subversion Working Copy Library - Internal routines
+
+ Requires:
+ - A working copy
+
+ Provides:
+ - Ability to manipulate working copy's versioned data.
+ - Ability to manipulate working copy's administrative files.
+
+ Used By:
+ - Clients.
+
+ @copyright
+ ====================================================================
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ ====================================================================
+ @endcopyright
+
+ @file svn_types.h
+ @brief Subversion's data types
+
+ @copyright
+ ====================================================================
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ ====================================================================
+ @endcopyright
+
+ @file svn_wc.h
+ @brief Subversion's working copy library
+
+ Requires:
+ - A working copy
+
+ Provides:
+ - Ability to manipulate working copy's versioned data.
+ - Ability to manipulate working copy's administrative files.
+
+ Used By:
+ - Clients.
+
+ Notes:
+ The 'path' parameters to most of the older functions can be
+ absolute or relative (relative to current working
+ directory). If there are any cases where they are
+ relative to the path associated with the
+ 'svn_wc_adm_access_t *adm_access' baton passed along with the
+ path, those cases should be explicitly documented, and if they
+ are not, please fix it. All new functions introduced since
+ Subversion 1.7 require absolute paths, unless explicitly
+ documented otherwise.
+
+ Starting with Subversion 1.7, several arguments are re-ordered
+ to be more consistent through the api. The common ordering used
+ is:
+
+ Firsts:
+ - Output arguments
+ Then:
+ - Working copy context
+ - Local abspath
+ Followed by:
+ - Function specific arguments
+ - Specific callbacks with their batons
+ Finally:
+ - Generic callbacks (with baton) from directly functional to
+ just observing:
+ - svn_wc_conflict_resolver_func2_t
+ - svn_wc_external_update_t
+ - svn_cancel_func_t
+ - svn_wc_notify_func2_t
+ - Result pool
+ - Scratch pool.
+
+ @copyright
+ ====================================================================
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ ====================================================================
+ @endcopyright
+
+ @file svn_wc.h
+ @brief Generic diff handler. Replacing the old svn_wc_diff_callbacks4_t
+ infrastructure
+
@copyright
====================================================================
Licensed to the Apache Software Foundation (ASF) under one
@@ -19158,101 +22112,15 @@ not be traversed while harvesting revision logs for each target.
@file svn_types.h
@brief Subversion's data types
- @copyright
- ====================================================================
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
- ====================================================================
- @endcopyright
-
- @file svn_opt.h
- @brief Option and argument parsing for Subversion command lines
-
- @copyright
- ====================================================================
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
- ====================================================================
- @endcopyright
-
- @file svn_string.h
- @brief Counted-length strings for Subversion, plus some C string goodies.
-
- There are two string datatypes: @c svn_string_t and @c svn_stringbuf_t.
- The former is a simple pointer/length pair useful for passing around
- strings (or arbitrary bytes) with a counted length. @c svn_stringbuf_t is
- buffered to enable efficient appending of strings without an allocation
- and copy for each append operation.
-
- @c svn_string_t contains a const char * for its data, so it is
- most appropriate for constant data and for functions which expect constant,
- counted data. Functions should generally use const @c svn_string_t
- * as their parameter to indicate they are expecting a constant,
- counted string.
-
- @c svn_stringbuf_t uses a plain char * for its data, so it is
- most appropriate for modifiable data.
-
- Invariants
-
- 1. Null termination:
-
- Both structures maintain a significant invariant:
-
- s->data[s->len] == '\\0'
-
- The functions defined within this header file will maintain
- the invariant (which does imply that memory is
- allocated/defined as @c len+1 bytes). If code outside of the
- @c svn_string.h functions manually builds these structures,
- then they must enforce this invariant.
-
- Note that an @c svn_string(buf)_t may contain binary data,
- which means that strlen(s->data) does not have to equal @c
- s->len. The NULL terminator is provided to make it easier to
- pass @c s->data to C string interfaces.
-
-
- 2. Non-NULL input:
-
- All the functions assume their input data is non-NULL,
- unless otherwise documented, and may seg fault if passed
- NULL. The input data may *contain* null bytes, of course, just
- the data pointer itself must not be NULL.
-
- Memory allocation
-
- All the functions make a deep copy of all input data, and never store
- a pointer to the original input data.
+
+
+Return @c SVN_ERR_ILLEGAL_TARGET if TARGETS contains a mixture of
+ * URLs and paths; otherwise return SVN_NO_ERROR.
+ *
+ * @since New in 1.7.
+
+
@copyright
====================================================================
Licensed to the Apache Software Foundation (ASF) under one
@@ -19274,8 +22142,8 @@ not be traversed while harvesting revision logs for each target.
====================================================================
@endcopyright
- @file svn_error.h
- @brief Common exception handling for Subversion.
+ @file svn_client_private.h
+ @brief Subversion-internal client APIs.
@copyright
====================================================================
@@ -19350,8 +22218,8 @@ not be traversed while harvesting revision logs for each target.
====================================================================
@endcopyright
- @file svn_magic.h
- @brief Subversion interface to libmagic.
+ @file svn_types.h
+ @brief Subversion's data types
@@ -19551,7 +22419,8 @@ not be traversed while harvesting revision logs for each target.
Subversion UserNameHandler file backend (managed representation)
- Simple credential handler to provide a static credential
+ Simple credential handler to provide a static credential via and .
+Use to override cached credentials.
When set implements a and
instance over the specified credential instance
@@ -19878,6 +22747,24 @@ is experimental
Base Extended Parameter container of commands
+
+ Restores a missing node
+
+
+ Restores a missing node
+
+
+ Copies a node to a different path
+
+
+ Copies a node to a different path
+
+
+ Moves a node to a different path
+
+
+ Moves a node to a different path
+
Gets the working copy version (svnversion )
@@ -19920,6 +22807,43 @@ routine to open its @a path and read the @c SVN_WC_ENTRY_THIS_DIR structure, or
Gets the text file status of a working copy path
+
+ Raises the event.
+
+
+ Raises the event.
+
+
+ Raises the event.
+
+
+ Raises the event.
+
+
+
+Raised just before a command is executed. This allows a listener
+to cleanup before a new command is started
+
+
+
+
+Raised when a subversion exception occurs.
+Set to true to cancel
+throwing the exception
+
+
+
+
+Raised on notifications. The event is first
+raised on the object and
+then on the
+
+
+
+Raised to allow canceling operations. The event is first
+raised on the object and
+then on the
+
Raised to allow canceling operations. The event is first
@@ -20021,6 +22945,12 @@ At this time this class is just included to enable a standalone test framework
over the SvnClient api; without depending on external tools)
+
+ Raises the event
+
+
+ Raised to notify changes by an in-progress command
+
Raises the event
@@ -21167,6 +24097,9 @@ the managed resource handler
Gets the subversion global ignore pattern as specified in the configuration
+
+ Gets or sets a value indicating whether the 'preserved-conflict-file-exts' should be forced to '*'
+
Gets or sets a boolean indicating whether to always use the subversion integrated diff library
instead of the user configured diff tools
@@ -21429,6 +24362,12 @@ normal
Serves as a hashcode for the specified type
+
+ MergeInfo only: Subtractive merge
+
+
+ MergeInfo only: Not inheritable
+
Gets the list of custom properties retrieved with the log
Properties must be listed in SvnLogArgs.RetrieveProperties to be available here
@@ -21436,6 +24375,12 @@ normal
Serves as a hashcode for the specified type
+
+ Gets a boolean indicating whether the versioned properties of a node are modified in this revision. (Value only available for 1.7+ servers)
+
+
+ Gets a boolean indicating whether the content of a node is modified in this revision. (Value only available for 1.7+ servers)
+
Gets the node kind of the changed path (Only available when committed to a 1.6+ repository)
@@ -21780,7 +24725,7 @@ Appends the specified path suffix to the given Uri
-Checks whether the specified path is an absolute path
+Checks whether the specified path is an absolute path that doesn't end in an unneeded '\'
@@ -44206,6 +47151,46 @@ The operation completed successfully.
Collection of Subversion error code values, located within the
* APR user error space.
+
+
+@since New in 1.7.
+
+
+@since New in 1.7.
+ @deprecated GSSAPI now handled by serf rather than libsvn_ra_serf.
+
+
+@since New in 1.5.
+
+
+@since New in 1.5.
+
+
+@since New in 1.3
+
+
+@since New in 1.1.
+
+
+@since New in 1.1.
+
+
+@since New in 1.5.
+
+
+@since New in 1.7
+
+
+@since New in 1.5.
+
+
+@since New in 1.8.
+
+
+@since New in 1.8.
+
+
+@since New in 1.8.
@since New in 1.7.
@@ -44217,7 +47202,9 @@ Collection of Subversion error code values, located within the
@since New in 1.7.
-@since New in 1.6.
+@since New in 1.6.
+ * @deprecated the internal sqlite support code does not manage schemas
+ * any longer.
@since New in 1.6.
@@ -44293,36 +47280,6 @@ Collection of Subversion error code values, located within the
@since New in 1.1.
-
-
-@since New in 1.3
-
-
-@since New in 1.1.
-
-
-@since New in 1.1.
-
-
-@since New in 1.5.
-
-
-@since New in 1.7.
-
-
-@since New in 1.7.
-
-
-@since New in 1.5.
-
-
-@since New in 1.5.
-
-
-@since New in 1.7
-
-
-@since New in 1.5.
@since New in 1.6
@@ -44341,13 +47298,16 @@ Collection of Subversion error code values, located within the
@deprecated To improve consistency between ra layers, this error code
- is replaced in ra_{neon|serf} by SVN_ERR_FS_NOT_FOUND.
+ is replaced in ra_serf by SVN_ERR_FS_NOT_FOUND.
Slated for removal in the next major release.
@deprecated To improve consistency between ra layers, this error code
is replaced by SVN_ERR_BAD_CONFIG_VALUE.
Slated for removal in the next major release.
+
+
+@since New in 1.8.
@since New in 1.7.
@@ -44372,6 +47332,15 @@ Collection of Subversion error code values, located within the
@since New in 1.2.
+
+
+@since New in 1.8.
+
+
+@since New in 1.8.
+
+
+@since New in 1.8.
@since New in 1.7.
@@ -44430,6 +47399,12 @@ Collection of Subversion error code values, located within the
@since New in 1.1.
+
+
+@since New in 1.8
+
+
+@since New in 1.8.
@since New in 1.7.
@@ -44516,6 +47491,9 @@ Collection of Subversion error code values, located within the
@deprecated Unused, slated for removal in the next major release.
+
+
+@since New in 1.8.
@since New in 1.7.
@@ -44553,15 +47531,15 @@ sequence of whitespace characters as a single space
Attempting to change text or props
+
+ object is already added or schedule-add
+
object is unversioned
object is unknown or missing
-
- object is already added or schedule-add
-
object is already schedule-delete
@@ -44583,8 +47561,11 @@ sequence of whitespace characters as a single space
textual conflict (on a file)
+
+ Value not determined yet
+
- Aliad for Merged
+ Alias for Merged
Choose the 'merged file'. The result file of the automatic merging; possibly with local edits
@@ -44620,6 +47601,9 @@ sequence of whitespace characters as a single space
An item with no text modifications
+
+ Create a repository in Subversion 1.8 compatible format
+
Create a repository in Subversion 1.7 compatible format
@@ -44719,6 +47703,33 @@ sequence of whitespace characters as a single space
Zero value. Never used by Subversion
+
+ A move in the working copy has been broken, i.e. degraded into a
+copy + delete. The notified path is the move source (the deleted path).
+
+
+
+ A copy from a foreign repository has started
+
+
+ The current operation left local changes of something that
+was deleted. The changes are available on (and below) the notified path
+
+
+
+ Conflict resolver is done. This can be used by clients to
+detect when to display conflict summary information, for example
+
+
+ Conflict resolver is starting. This can be used by clients to
+detect when to display conflict summary information, for example.
+
+
+ Operation failed because a node is obstructed
+
+
+ Just the lock on a file was removed during update
+
The operation skipped the path because it was conflicted.
@@ -44805,6 +47816,66 @@ copy, not the source).
Starting an update operation.
+
+ The structure of a revision is being verified. @since New in 1.8.
+
+
+ A revision was skipped during loading. @since New in 1.8.
+
+
+ Upgrade has started.
+
+
+ Recover has started.
+
+
+ The operation has acquired a mutex for the repo.
+
+
+ Mergeinfo has been normalized
+
+
+ A copied node has been encountered
+
+
+ A node has finished loading
+
+
+ A node has begun loading
+
+
+ A revision has finished loading
+
+
+ A revision has begun loading
+
+
+ packing of the shard revprops has completed
+
+
+ packing of the shard revprops has commenced
+
+
+ packing of an FSFS shard is completed
+
+
+ packing of an FSFS shard has commenced
+
+
+ All revisions have finished being verified.
+
+
+ All revisions have finished being dumped.
+
+
+ A revision has finished being verified.
+
+
+ A revision has finished being dumped.
+
+
+ A warning message is waiting.
+
D + all descendants (full recursion from D). Updates will pull in any
@@ -44847,6 +47918,32 @@ files or subdirectories not already present
Creates a childpool within the specified parent pool
+
+ @copyright
+ ====================================================================
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ ====================================================================
+ @endcopyright
+
+ @file svn_types.h
+ @brief Subversion's data types
+
+
Gets a boolean indicating whether the path is a file path (and not a Uri)
@@ -44858,8 +47955,6 @@ files or subdirectories not already present
Main class of Subversion api. This class is responsible for loading the unmanaged api
-
-
@@ -44881,5 +47976,7 @@ files or subdirectories not already present
+
+
\ No newline at end of file
diff --git a/src/Main/Core/Project/Src/AddInTree/AddIn/AddInReference.cs b/src/Main/Core/Project/Src/AddInTree/AddIn/AddInReference.cs
index 3f7b062e0d..eac36e71f0 100644
--- a/src/Main/Core/Project/Src/AddInTree/AddIn/AddInReference.cs
+++ b/src/Main/Core/Project/Src/AddInTree/AddIn/AddInReference.cs
@@ -96,11 +96,11 @@ namespace ICSharpCode.Core
}
if (reference.Name == "SharpDevelop") {
- // HACK: SD 4.1/4.2 AddIns work with SharpDevelop 4.3
+ // HACK: SD 4.1/4.2/4.3 AddIns work with SharpDevelop 4.4
// Because some 4.1 AddIns restrict themselves to SD 4.1, we extend the
// supported SD range.
- if (reference.maximumVersion == new Version("4.1") || reference.maximumVersion == new Version("4.2")) {
- reference.maximumVersion = new Version("4.3");
+ if (reference.maximumVersion == new Version("4.1") || reference.maximumVersion == new Version("4.2") || reference.maximumVersion == new Version("4.3")) {
+ reference.maximumVersion = new Version("4.4");
}
}
}
diff --git a/src/Setup/Chocolatey/Tools/chocolateyInstall.ps1 b/src/Setup/Chocolatey/Tools/chocolateyInstall.ps1
index 46b8b3c933..e6eba021fa 100644
--- a/src/Setup/Chocolatey/Tools/chocolateyInstall.ps1
+++ b/src/Setup/Chocolatey/Tools/chocolateyInstall.ps1
@@ -3,7 +3,7 @@
$packageName = 'sharpdevelop'
$installerType = 'msi'
-$url = 'http://downloads.sourceforge.net/sharpdevelop/SharpDevelop_4.3.1.9430_Setup.msi?download'
+$url = 'http://downloads.sourceforge.net/sharpdevelop/SharpDevelop_4.3.3.9663_Setup.msi?download'
$silentArgs = '/q'
$validExitCodes = @(0)
diff --git a/src/Setup/Chocolatey/sharpdevelop.nuspec b/src/Setup/Chocolatey/sharpdevelop.nuspec
index 950b5ffb7b..684d14e2f8 100644
--- a/src/Setup/Chocolatey/sharpdevelop.nuspec
+++ b/src/Setup/Chocolatey/sharpdevelop.nuspec
@@ -4,14 +4,14 @@
sharpdevelop
SharpDevelop
- 4.3.1
+ 4.3.3
IC#Code Team
SharpDevelop Team
sharpdevelop
#develop (short for SharpDevelop) is a free IDE for C#, VB.NET, F#, IronPython and IronRuby projects on Microsoft's .NET platform. It has designers for WPF, Windows Forms and Entity Framework, and also supports ASP.NET MVC.
http://www.icsharpcode.net/opensource/sd/
sharpdevelop ide .net developer web windows debugging editor tool productivity
- Copyright ©2001-2012 IC#Code.
+ Copyright ©2001-2013 IC#Code.
http://www.icsharpcode.net/OpenSource/SD/
false
diff --git a/src/Setup/Files.wxs b/src/Setup/Files.wxs
index c33b1c91fd..022674ffab 100644
--- a/src/Setup/Files.wxs
+++ b/src/Setup/Files.wxs
@@ -321,6 +321,9 @@
+
+
+
@@ -1576,8 +1579,6 @@
-
-
diff --git a/src/Setup/Setup.wxs b/src/Setup/Setup.wxs
index 98aa6e786d..5daaa38dcc 100644
--- a/src/Setup/Setup.wxs
+++ b/src/Setup/Setup.wxs
@@ -176,6 +176,7 @@
+
@@ -656,7 +657,24 @@
INSTALLDIR
-
+
+
+ WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 and NOT Installed
+
+
+
+
+
+
+